HOME»基本情報技術者試験掲示板»平成24年春期問3設問2
投稿する
平成24年春期問3設問2 [2399]
miniさん(No.1)
https://www.fe-siken.com/kakomon/24_haru/pm03.html
上記URL「平成24年春期午後問3設問2」の解答について質問です。
「"肉じゃが"購入者の社員番号と購入皿数を求める」SQL文の選択肢で、なぜ(イ)が間違いになるのかわかりません。
(イ)と(エ)では何が変わるのでしょうか。
上記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
グループ化列または集約関数でなければなりません。
・グループ化列: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」が入ります。
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())を参照しようとしているかに着目して解答吟味してみます!
おかげさまでHAVING句の使用ルールが分かりました。
次、HAVING句を含む選択肢と遭遇したら、ちゃんとGROUP BY句でグループ化されている列、または集約関数(SUM(),COUNT(),MAX(),MIN(),AVG())を参照しようとしているかに着目して解答吟味してみます!
2020.08.09 11:08