平成24年春期問3設問2

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
miniさん  
(No.1)
https://www.fe-siken.com/kakomon/24_haru/pm03.html

上記URL「平成24年春期午後問3設問2」の解答について質問です。
「"肉じゃが"購入者の社員番号と購入皿数を求める」SQL文の選択肢で、なぜ(イ)が間違いになるのかわかりません。
(イ)と(エ)では何が変わるのでしょうか。
2020.08.08 23:25
おわ!さん 
(No.2)
HAVING句で参照される列は、
グループ化列または集約関数でなければなりません。

・グループ化列:GROUP BY句で指定した列
  →今回の設問では精算表.社員番号
・集約関数:SUM()、COUNT()、AVG()、MIN()、MAX()等

(イ)はHAVING句で、上記のどちらにも該当しない列を
参照しようとしているため、実行エラーになります。

<参考>
平成29年秋期 午後問3 設問1解説
https://www.fe-siken.com/kakomon/29_aki/pm03.html

平成29年度 SQLについて[1735]
https://www.fe-siken.com/bbs/1735.html
2020.08.09 01:53
おわ!さん 
(No.3)
設問2のSQLは
FROM → WHERE → GROUP BY → HAVING →  SELECT
の順に実行されます。

WHERE句で行を選択した後、
GROUP BY句で同じ社員番号を持つ行を同じグループに振り分けます。

(イ)はWHERE句で料理名を指定していませんので、
同じ社員番号の「ごはん」と「肉じゃが」の購入データは
どちらも同じグループに振り分けられます。
今回の設問のHAVING句はNo.2の理由でエラーになりますが、
仮にHAVING句を除いてSQLを実行すると、図2の例の場合、
社員番号「050221」の購入冊数には、
「ごはん」と「肉じゃが」の購入冊数を合計した「2」が入ります。

(エ)はWHERE句で料理名を「肉じゃが」に限定していますので、
同じ社員番号の「肉じゃが」の購入データのみ
同じグループに振り分けられます。
SQLを実行すると、図2の例の場合、
社員番号「050221」の購入冊数には、
「肉じゃが」の購入冊数「1」が入ります。
2020.08.09 10:00
miniさん  
(No.4)
ありがとうございます。

おかげさまでHAVING句の使用ルールが分かりました。
次、HAVING句を含む選択肢と遭遇したら、ちゃんとGROUP BY句でグループ化されている列、または集約関数(SUM(),COUNT(),MAX(),MIN(),AVG())を参照しようとしているかに着目して解答吟味してみます!
2020.08.09 11:08

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop