平成27年春期午後問3
The gameさん
(No.1)
https://www.fe-siken.com/kakomon/27_haru/pm03.html
この問題の問3の設問2でcount(*)とcount(会員表.会員番号)が一緒であることがわかりません。
GROUP BYで世帯表.班ごとになっているのはわかるのですが、だとしたらGROUP BYより、count(*)はcount(世帯表.班)になるような気がします。count(*)がどれに対するcountなのかってどう見分ければいいですか。
この問題の問3の設問2でcount(*)とcount(会員表.会員番号)が一緒であることがわかりません。
GROUP BYで世帯表.班ごとになっているのはわかるのですが、だとしたらGROUP BYより、count(*)はcount(世帯表.班)になるような気がします。count(*)がどれに対するcountなのかってどう見分ければいいですか。
2021.06.15 00:38
GinSanaさん
★FE シルバーマイスター
(No.2)
そもそも会員テーブルの主キーは会員番号で、必ず入るんですよね。それで、count(会員番号)は会員番号がnullでないのが何行いますか?って問合せなわけですから、count(*)と変わりませんよね(count(*)はnullを許容するが、今回はnull云々はどうでもよい)。
2021.06.15 09:20
GinSanaさん
★FE シルバーマイスター
(No.3)
>count(*)がどれに対するcountなのか
は、select *よろしく 全列 です。指定すると、実行したときにオプティマイザってのがテーブルの列名に置き換えるんですよ。
※実際はムダが多いので、世の中のメジャーなRDBMSのオプティマイザは「COUNT(*)」を「COUNT(列名1)」とか内部的に置き換えて実行している。
2021.06.15 09:25
The gameさん
(No.4)
設問していただき、ありがとうございます。count(*)=班ごとの会員数なら、count(会員表.会員番号)は、会員全員の会員数を数えるため、設問3の(ア)に対する誤答理由、同じ値になるというのは違う気がするのですが。
2021.06.16 20:11
GinSanaさん
★FE シルバーマイスター
(No.5)
この投稿は投稿者により削除されました。(2021.06.17 08:09)
2021.06.17 08:09
GinSanaさん
★FE シルバーマイスター
(No.6)
>count(*)=班ごとの会員数なら、count(会員表.会員番号)は、会員全員の会員数を数えるため、設問3の(ア)に対する誤答理由、同じ値になるというのは違う気がするのですが。
実際にSQL通りgroup byをせずに図2のように結合してみると
世帯表.世帯番号 会員表.会員番号(以下略)
0181 0412
0181 0413
これでgroup byで集約対象を世帯表.世帯番号に置いているから
0181に集約されたのが丸々2行というのがcount(*)のいうところで(*を列名に置換すれば、結合後の全ての列の塊、つまり 世帯表.世帯番号 会員表.会員番号(以下略))が世帯番号ごとにいくつあるかを数えるわけで、
当然countのフォーカスを会員番号に当てても 必ず会員番号は入っているのだから、言い換えれば
結合後の全ての列の塊の中に会員番号がnullでないのは世帯番号ごとにいくつありますか?
と聞いているのと同義であり、結果は同じになるんですよ。
2021.06.17 08:09
The gameさん
(No.7)
GROUP BYで世帯表.班となっているため、会員表の会員番号を数える際もあくまで、班ごととなるため、count(*)と同じ意味になるということですね。わかりやすい説明ありがとうございます。
2021.06.17 09:47
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告