トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

7-21 sum関数とcase式

SQLパズル

productsテーブル
week  product  total
----  -------  -----
   1     eggs      7
   1     beef      4
   2     eggs      9
   3     soup      5
   4     beef      3

productsテーブルから、
weekごとのbeefの数と、eggsの数と、
beefの数とeggsの数の合計を出力する。

出力結果
week  beef  eggs  total
----  ----  ----  -----
   1     4     7     11
   2     0     9      9
   3     0     0      0
   4     3     0      3


データ作成スクリプト

create table products(
week    number(1),
Product char(4),
total   number(1));

insert into products values(1,'eggs',7);
insert into products values(1,'beef',4);
insert into products values(2,'eggs',9);
insert into products values(3,'soup',5);
insert into products values(4,'beef',3);
commit;


SQL

select week,
sum(case when Product = 'beef' then total else 0 end) as beef,
sum(case when Product = 'eggs' then total else 0 end) as eggs,
sum(case when Product in('beef','eggs') then total else 0 end) as total
from products
group by week
order by week;


解説

sum関数とcase式を組み合わせると、
条件に応じた集計ができます。