第8問
以下に示す、ある小売店における販売データ「取引記録」から、販売店別の商品ご との販売個数を集計した「店舗別商品販売個数」を作成することを考える。 取引記録 取引ID 商品ID 販売店ID 販売個数 T0001 Y A 2 T0002 Y A 1 T0003 X A 3 T0004 Y B 3 T0005 Y A 1 T0006 X B 2 T0007 X B 3 T0008 Z A 1 T0009 X A 1 … … … … 店舗別商品販売個数 商品ID 販売店A 販売店B X 622 274 Y 817 351 Z 151 72 9 以下のSQL 文の空欄①~③に入る語句の組み合わせとして、最も適切なものを 下記の解答群から選べ。 【SQL 文】 SELECT 商品ID, SUM(CASE ① WHEN 'A' THEN ② ELSE 0 END) AS 販売店A, SUM(CASE ① WHEN 'B' THEN ② ELSE 0 END) AS 販売店B FROM 取引記録 GROUP BY ③ ORDER BY ③ ;
- ア ①:商品ID ②:1 ③:販売店ID
- イ ①:商品ID ②:販売個数 ③:販売店ID
- ウ ①:販売店ID ②:1 ③:商品ID
- エ ①:販売店ID ②:1 ③:販売店ID
- オ ①:販売店ID ②:販売個数 ③:商品ID
▼ 解答・解説を見る
正解:オ
解答:オ
商品IDごとに行を作り、販売店A・Bの販売個数を横持ち集計する「行→列変換(ピボット)」をCASE式で行うSQL。
- ①=販売店ID:
CASE 販売店ID WHEN 'A' … WHEN 'B' …として、販売店で列を振り分ける。判定対象は販売店IDが正しい。 - ②=販売個数:店舗が一致したときに合計したいのは「販売個数」。
SUM(CASE … THEN 販売個数 ELSE 0 END)で店舗別の販売個数合計が得られる。THEN 1では件数(取引回数)の集計になり、個数の集計表(622や817など)と一致しないため誤り。 - ③=商品ID:出力は商品IDごとの1行なので、
GROUP BY 商品ID・ORDER BY 商品IDが正しい。
よって ①:販売店ID、②:販売個数、③:商品ID の オ。