平成26年春期午後問6 設問3のhについて質問です
広告
初心者ですさん
(No.1)
https://www.ap-siken.com/kakomon/26_haru/pm06.html
設問3のhについて質問があります。
GROUP BY句を使うときは、SELECT文で選択した列を指定すべきであり、SELECT文で選択した列から一意に特定できる列は選択しなくても良い、という認識であったため、解答を「A.船便番号,C.座席クラス番号」としました。
この解答は合っているのか教えていただきたいです。
回答よろしくお願いいたします。
設問3のhについて質問があります。
GROUP BY句を使うときは、SELECT文で選択した列を指定すべきであり、SELECT文で選択した列から一意に特定できる列は選択しなくても良い、という認識であったため、解答を「A.船便番号,C.座席クラス番号」としました。
この解答は合っているのか教えていただきたいです。
回答よろしくお願いいたします。
2025.04.03 17:25
GinSanaさん
★AP プラチナマイスター
(No.2)
>SELECT文で選択した列を指定すべきであり、SELECT文で選択した列から一意に特定できる列は選択しなくても良い
SELECT句で、船便番号、船便名、座席クラス番号、座席クラス名単位の件数を出したいという話なわけで、船便番号、船便名、座席クラス番号、座席クラス名単位に集約します、ということはGROUP BYで指示しないとダメですね。
2025.04.03 19:07
GinSanaさん
★AP プラチナマイスター
(No.3)
少なくとも、SELECT文で選択した列から一意に特定できる列は選択しなくても良いというルールは聞いたことはないです
深掘りしたい場合は、SQLのGROUP BY句の処理を理解する - ぱと隊長日誌を読んでください
深掘りしたい場合は、SQLのGROUP BY句の処理を理解する - ぱと隊長日誌を読んでください
2025.04.03 19:15
asdagrgragさん
(No.4)
GROUP BY句を使うときは、SELECT文で選択した列を指定すべきであり、SELECT文で選択した列から一意に特定できる列は選択しなくても良い、
というわけではなく
GROUP BY句を使うとき複数のテーブルでjoinを行うときには原則SELECT文で選択した列とその列のテーブルを指定すべきである(つまりは、2つ以上のテーブルに同じ名前の列があるときは必ずどちらのテーブルの列なのか明示する)ことであるが、そのカラムが1つのテーブルのみに存在するときには、テーブルまで明示する必要はない。
ということをごちゃまぜに覚えていたのではないですかね
というわけではなく
GROUP BY句を使うとき複数のテーブルでjoinを行うときには原則SELECT文で選択した列とその列のテーブルを指定すべきである(つまりは、2つ以上のテーブルに同じ名前の列があるときは必ずどちらのテーブルの列なのか明示する)ことであるが、そのカラムが1つのテーブルのみに存在するときには、テーブルまで明示する必要はない。
ということをごちゃまぜに覚えていたのではないですかね
2025.04.03 22:25
初心者ですさん
(No.5)
みなさん回答ありがとうございます。
ちなみに、このような判断をした理由は、
https://www.ap-siken.com/kakomon/03_haru/pm06.html
の設問3のgの解説に、
「GROUP BY クを記述した場合、SELECT句に記述できる列はGROUP BY句で指定した列(とその列から一意に値を特定できる列)のみです。」という記述があったため、このような判断をした次第です。
なんとなく、この記述について誤った理解をしてしまっている気がするので、何がおかしいかを教えていただきたいです。
ちなみに、このような判断をした理由は、
https://www.ap-siken.com/kakomon/03_haru/pm06.html
の設問3のgの解説に、
「GROUP BY クを記述した場合、SELECT句に記述できる列はGROUP BY句で指定した列(とその列から一意に値を特定できる列)のみです。」という記述があったため、このような判断をした次第です。
なんとなく、この記述について誤った理解をしてしまっている気がするので、何がおかしいかを教えていただきたいです。
2025.04.04 19:10
GinSanaさん
★AP プラチナマイスター
(No.6)
>「GROUP BY クを記述した場合、SELECT句に記述できる列はGROUP BY句で指定した列(とその列から一意に値を特定できる列)のみです。」という記述があったため、このような判断をした次第です。
これは、「とその列から一意に値を特定できる列」という解説に問題があります。集合関数(例:COUNT、SUM、MAX、MIN)の列は、GROUP BY句で指定しないでもよいのです。
で、集約対象にはしたくないんだが、SELECTには出したい情報があるという場合があります。そういう場合は、MAX関数を使って無理やり出したりするのです。
2025.04.04 19:14
GinSanaさん
★AP プラチナマイスター
(No.7)
というより、
GROUP BYでこの件みたいにどう括弧内で注釈つけるかがややこしいのは、GROUP BYは式だって書けるだろ、だから式も書けるんだよとか細かいやつは始まるからです。たとえばCASE WHEN ・・・ ENDも、GROUP BYに書けるんですよ。そういうことまで応用でいうか、とか始まると面倒くさいので、なんか「とその列から一意に値を特定できる列」とか濁したのかはわからんですが、(とその列から一意に値を特定できる列)という括弧書きはないほうがまだ素直に読めます、
したがって、空欄にはSELECT句に記述されている(集計関数以外の)列でグループ化する「GROUP BY R.貸出予定年月日, R.駐車場ID, R.車種ID, R.会員ID」が当てはまります。
という解説があるなら、GROUP BY句を記述した場合、SELECT句に記述できる列はGROUP BY句で指定した列(とその列から一意に値を特定できる列)のみです。
の括弧書きの解釈に逡巡するような説明をせずに、ふつうに書いた方がよかったかもしれませんね。GROUP BYでこの件みたいにどう括弧内で注釈つけるかがややこしいのは、GROUP BYは式だって書けるだろ、だから式も書けるんだよとか細かいやつは始まるからです。たとえばCASE WHEN ・・・ ENDも、GROUP BYに書けるんですよ。そういうことまで応用でいうか、とか始まると面倒くさいので、なんか「とその列から一意に値を特定できる列」とか濁したのかはわからんですが、(とその列から一意に値を特定できる列)という括弧書きはないほうがまだ素直に読めます、
2025.04.04 19:41
初心者ですさん
(No.8)
みなさん返信ありがとうございました。
変な誤解が解けて良かったです。
回答ありがとうございました!
変な誤解が解けて良かったです。
回答ありがとうございました!
2025.04.04 21:30
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から40日経過したスレッドへの投稿はできません。
広告