HOME»データベーススペシャリスト掲示板»R3午後Ⅰ問3設問1(1) ホ
投稿する
R3午後Ⅰ問3設問1(1) ホ [0288]
受験生さん(No.1)
お世話になります。
掲題について質問させていただきます。
お聞きしたい内容は、解答の『沿線、TOTAL』のうち、『TOTAL』がGROUP BYの対象となる理由についてです。
まず、『沿線』についてはGROUP BYの対象となる理解ができました。
何故なら、SQLの説明から「沿線ごとに」集計することが分かるからです。
しかし、『TOTAL』は、テーブル自体に1レコードしかなく、グルーピングする必要性が分かりませんでした。
お手数おかけしますが、本疑問点について解説いただけますと幸いです。
掲題について質問させていただきます。
お聞きしたい内容は、解答の『沿線、TOTAL』のうち、『TOTAL』がGROUP BYの対象となる理由についてです。
まず、『沿線』についてはGROUP BYの対象となる理解ができました。
何故なら、SQLの説明から「沿線ごとに」集計することが分かるからです。
しかし、『TOTAL』は、テーブル自体に1レコードしかなく、グルーピングする必要性が分かりませんでした。
お手数おかけしますが、本疑問点について解説いただけますと幸いです。
2022.07.15 19:18
にゃんちゃんさん(No.2)
★DB シルバーマイスター
GROUP BYを使う場合
GROUP BY句に指定した列、集約関数(SUM、AVG、COUNT関数など)しか使えなくなります。
つまり「GROUP BY 沿線」とした場合は
沿線列と、COUNT(*)くらいしか使用できなくなります。
ところが本問のSQL文を見ると
SELECT 沿線, の後に
FLOOR([ハ]*100/[ニ])となっており
[ハ][ニ]に入る列も使えないと困る(=GROUP BY句に指定する)ことになります。
[ハ]のCOUNT(*)は、集約関数なので問題なく使用できます。
[ニ]のTOTAL列は、GROUP BY句に指定しないと使えません。
GROUP BY句に指定した列、集約関数(SUM、AVG、COUNT関数など)しか使えなくなります。
つまり「GROUP BY 沿線」とした場合は
沿線列と、COUNT(*)くらいしか使用できなくなります。
ところが本問のSQL文を見ると
SELECT 沿線, の後に
FLOOR([ハ]*100/[ニ])となっており
[ハ][ニ]に入る列も使えないと困る(=GROUP BY句に指定する)ことになります。
[ハ]のCOUNT(*)は、集約関数なので問題なく使用できます。
[ニ]のTOTAL列は、GROUP BY句に指定しないと使えません。
2022.07.15 20:59
受験生さん(No.3)
にゃんちゃん様
ご回答いただきありがとうございます。
にゃんちゃん様がおっしゃられている「使えなくなる」とは、SELECT句で使用できなくなるという意味であると認識いたしましたが、この解釈は正しいでしょうか?
以上、ご確認お願いいたします。
ご回答いただきありがとうございます。
にゃんちゃん様がおっしゃられている「使えなくなる」とは、SELECT句で使用できなくなるという意味であると認識いたしましたが、この解釈は正しいでしょうか?
以上、ご確認お願いいたします。
2022.07.16 11:09
GinSanaさん(No.4)
★DB ゴールドマイスター
グループバイ句に存在しない列名をセレクト句に指定するとエラーになるから、とかそういうストレートな話で対象になったのでは?
taityo-diary.hatenablog.jp/entry/2018/06/09/080903
SQLのGROUP BY句の処理を理解する
taityo-diary.hatenablog.jp/entry/2018/06/09/080903
SQLのGROUP BY句の処理を理解する
2022.07.16 15:57
にゃんちゃんさん(No.5)
★DB シルバーマイスター
GROUP BY句で指定しなかった列は
SELECT句でも使用できませんし、例えばORDER BY句にも指定できません。
唯一、集約関数内のみ使用可能です。
ここで登場するFLOOR関数は集約関数ではないので、ここでもGROUP BYにない列は使用できません。
SELECT句でも使用できませんし、例えばORDER BY句にも指定できません。
唯一、集約関数内のみ使用可能です。
ここで登場するFLOOR関数は集約関数ではないので、ここでもGROUP BYにない列は使用できません。
2022.07.16 16:00
GinSanaさん(No.6)
★DB ゴールドマイスター
世の中の実際の現場のひどいSQLだと、MAX(group byに入れたくない列名)とかやって無理矢理大量に入れたりしてますが、
おまえはサブクエリをしらんのか、という次元でひどい書き方なのでやめたほうがいいです。
おまえはサブクエリをしらんのか、という次元でひどい書き方なのでやめたほうがいいです。
2022.07.16 16:16
受験生さん(No.7)
GinSana様
コメントありがとうございます。
ご展開いただいたサイトを参考に、GROUP BYについて理解を深めることができました。
また、実際にSQLを書く際は、サブクエリをうまく使用するようにしたいと思います。
以上、ありがとうございました。
コメントありがとうございます。
ご展開いただいたサイトを参考に、GROUP BYについて理解を深めることができました。
また、実際にSQLを書く際は、サブクエリをうまく使用するようにしたいと思います。
以上、ありがとうございました。
2022.07.17 21:41
受験生さん(No.8)
にゃんちゃん様
ご回答ありがとうございます。
詳細にご説明いただき、より理解を深めることができました。
以上、ありがとうございました。
ご回答ありがとうございます。
詳細にご説明いただき、より理解を深めることができました。
以上、ありがとうございました。
2022.07.17 21:42