1

假设我有这样一张桌子:

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. 总结每组的时间。

这样我的查询只会导致两行。

到目前为止我得到的是:

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

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

我怎么能把它们分成两类?

干杯!

4

3 回答 3

5

group by可以采用任意子句,所以

GROUP BY (operation = 'read')

将工作。本质上,您将根据比较的布尔结果进行分组,而不是操作字段的值,因此任何“读取”的记录都将是 group 1,而任何未读取的记录都将是 group 0

于 2012-10-29T16:57:42.917 回答
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
于 2012-10-29T17:04:52.283 回答
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;
于 2012-10-29T17:00:40.437 回答