如何在sql中将行分为两组?

时间:2012-10-29 16:56:00

标签: sql group-by

假设我有这样一张桌子:

id|time|operation
1  2      read
2  5      write
3  3      read
4  7      read
5  2      save
6  1      open

现在我想做两件事:

  1. 将所有这些记录分为两组: 1)操作等于“读”的所有行 2)所有其他行。
  2. 总结每组的时间。
  3. 这样我的查询只会产生两行。

    到目前为止我得到的是:

    select 
     sum(time) as total_time,
     operation
    group by
     operation
    ;
    

    虽然这给了我很多组,具体取决于不同操作的数量。

    我如何才能将它们分为两类?

    干杯!

3 个答案:

答案 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