0

次の範囲(10〜20、21〜30、31〜40)のカウントと合計を取得したいと思います。このクエリを変更して取得するにはどうすればよいですか?

select count (t.aaa), sum (t.bbb)
from xxx t
where t.qqq IN  ('3')
and t.www like 'A'
and t.eee >= TO_DATE('2008/03/20','YYYY/MM/DD')
and t.eee <= TO_DATE('2009/03/21','YYYY/MM/DD')
and t.ttt >= 10 and t.ttt <= 20

出力は次のようになります。

╔════════╦══════════════╦════════════╗
║ TRANGE ║ COUNT(t.aaa) ║ SUM(t.bbb) ║
╠════════╬══════════════╬════════════╣
║ 10-20  ║          340 ║ 4981620000 ║
║ 21-30  ║          239 ║ 3999425000 ║
║ 31-40  ║          199 ║ 4076525000 ║
╚════════╩══════════════╩════════════╝
4

1 に答える 1

2

t.www と各範囲でグループ化したいようです。ケースによって、各数値を範囲値に変換できます。これを group by で使用できます。

SELECT CASE 
   WHEN t.ttt BETWEEN 10 AND 20 THEN '10-20'
   WHEN t.ttt BETWEEN 21 AND 30 THEN '21-30'
   ELSE '31-40' END TRange
   , count(t.aaa), sum(t.bbb)
FROM xxx t
WHERE t.qqq IN  ('3')
AND t.www IN ('A','B','C','D')
AND t.eee >= TO_DATE('2008/03/20','YYYY/MM/DD')
AND t.eee <= TO_DATE('2009/03/21','YYYY/MM/DD')
AND t.ttt BETWEEN 10 AND 40
GROUP BY CASE 
   WHEN t.ttt BETWEEN 10 AND 20 THEN '10-20'
   WHEN t.ttt BETWEEN 21 AND 30 THEN '21-30'
   ELSE '31-40' END;

SQLフィドル。

于 2012-12-11T15:42:19.073 に答える