假设我有这样一张桌子:
id|time|operation
1 2 read
2 5 write
3 3 read
4 7 read
5 2 save
6 1 open
现在我想做两件事:
这样我的查询只会产生两行。
到目前为止我得到的是:
select
sum(time) as total_time,
operation
group by
operation
;
虽然这给了我很多组,具体取决于不同操作的数量。
我如何才能将它们分为两类?
干杯!
答案 0 :(得分:4)
group by
可以采用任意条款,所以
GROUP BY (operation = 'read')
会奏效。基本上你要对比较的布尔结果进行分组,而不是操作字段的值,因此任何“读取”的记录都是组1
,任何非读取的记录都是组{{1 }}
答案 1 :(得分:0)
或者,您也可以使用case
声明:
select
case when operation != 'read' then 'other'
else operation end as operation
,sum(time) as total_time
from table
group by case when operation != 'read' then 'other'
else operation end;
答案 2 :(得分:0)
尝试
SELECT T.op, sum(T.time)
FROM ( SELECT time, CASE operation
WHEN 'read' THEN 'read' ELSE 'not read' END AS op ) T
GROUP BY T.op