1

私がそのようなテーブルを持っているとしましょう:

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

そして今、私は2つのことをしたいと思います:

  1. これらすべてのレコードを2つのグループに分割します。1)操作が「読み取り」に等しいすべての行2)他のすべての行。
  2. 各グループの時間を合計します。

そのため、クエリの結果は2行のみになります。

私がこれまでに得たものは次のとおりです。

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

個別の操作の数に応じて、それは私に多くのグループを与えますが。

それらを2つのカテゴリにのみグループ化するにはどうすればよいですか?

乾杯!

4

3 に答える 3

5

group by任意の句を取ることができるので、

GROUP BY (operation = 'read')

動作します。基本的に、操作フィールドの値ではなく、比較のブール結果に基づいてグループ化するため、「読み取り」であるレコードはグループ1になり、読み取り以外のレコードはグループになります0

于 2012-10-29T16:57:42.917 に答える
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 に答える
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 に答える