SQL 条件聚合

SQL conditional aggregate

我有一个 table:

items status count date
----- ------ ----- ----------
apple good   100   01/02/2017
apple good   200   03/02/2017
apple bad    50    02/02/2017
pear  good   100   04/02/2017

我正在寻找的结果是根据状态汇总计数并显示每个项目的最新日期:

items  count  date
-----  -----  ----------
apple  250    03/02/2017
pear   100    04/02/2017

使用 sum 、 max 和 group by 以及 sum 正确和错误的情况

select items, sum(case when status = 'good' then count else -count end), max(date)
from my_table 
group by itmes

或者如果您不需要基于好坏的相对总和

select items, sum( count ), max(date)
from my_table 
group by itmes

试试这个:

SELECT items, SUM(count) count, MAX(date) date
FROM table
GROUP BY items

如果您想为每个状态单独计算总和,则:

SELECT items, status, SUM(count) count, MAX(date) date
FROM table
GROUP BY items, status

我想你只是想要:

select items, sum(count), max(date)
from t
group by items;