第8問
下表は2011年月30日から同年月20日までの販売履歴表である。この表に 対して次のSQL 文を実行した場合、下記の解答群の中のどの結果を得るか。最も 適切なものを選べ。 SELECT 担当者コード, 製品名, SUM(個数) FROM 販売履歴表 GROUP BY 担当者コード, 製品名 HAVING SUM(個数)>=3 販売履歴表 販売コード 製 品 名 個 数 販 売 日 担当者コード 101 テレビ 1 2011/1/30 E103 102 エアコン 2 2011/2/ 5 E102 103 テレビ 1 2011/2/ 7 E103 104 電 池 10 2011/2/ 7 P 101 105 エアコン 1 2011/2/10 E102 106 テレビ 2 2011/2/15 P 101 107 電 池 3 2011/2/16 E102 108 テレビ 2 2011/2/20 P 102
- ア 担当者コード製品名SUM(個数) E102
- イ アコン E102 電 池 P 101 電 池
- ウ 担当者コード製品名SUM(個数) E102
- エ アコン E102
- オ アコン E102 電 池 P 101 電 池
- 製品名SUM(個数) テレビ
- アコン 電 池
- 製品名 個 数
- アコン 電 池 電 池 ― 7― ◇M6(688―139)
▼ 解答・解説を見る
正解:ア
解答:ア
〔SQLのGROUP BY・HAVINGによる集計結果を問う問題〕
SQL文は「担当者コードと製品名でグループ化し、個数合計が3以上のグループのみ抽出して、担当者コード・製品名・個数合計を表示」する。
担当者コード×製品名で個数を合計すると:
- E103・テレビ:1+1=2 → 除外(<3)
- E102・エアコン:2+1=3 → 抽出
- P101・電池:10 → 抽出
- P101・テレビ:2 → 除外
- E102・電池:3 → 抽出
- P102・テレビ:2 → 除外
抽出結果は「E102 エアコン 3」「P101 電池 10」「E102 電池 3」の3行で、表示列は担当者コード・製品名・SUM(個数)の3列。
- ア(○):担当者コード・製品名・SUM(個数)の3列を持ち、HAVING条件(合計3以上)を満たす担当者コード別の行が並ぶ集計結果で正しい。
- イ(×):担当者コードでグループ化していない(製品名のみで集計した)結果になっており不適。
- ウ(×):担当者コード列が無く、GROUP BY指定(担当者コード, 製品名)に合致しない。
- エ(×):個数を合計しておらず、HAVINGによる絞り込み(3以上)も反映されていない。
よって ア。