令和元年秋期午後問3

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

設問2:c について質問したいです。
設問においてISBNと書籍名をグループ化して集合関数に従い目的の表を抽出していますが、ISBNと書籍名は一意に対応しているためISBNもしくは書籍名のどちらかだけをグループ化したとしても構文エラーは発生しないという認識であってますか?

例:GROUP BY 書籍情報表.ISBNコード, 書籍情報表.書籍名  →  GROUP BY 書籍情報表.ISBNコード
2021.11.16 17:03
chihiroさん 
FE プラチナマイスター
(No.2)
例のように変更を行った場合はSELECT文で抽出する列も変更しなければ構文エラーを起こすと思います。
>例:GROUP BY 書籍情報表.ISBNコード, 書籍情報表.書籍名  →  GROUP BY 書籍情報表.ISBNコード
このように変更した場合は、
>SELECT 書籍情報表.ISBNコード, 書籍情報表.書籍名 , COUNT(*) AS 貸出回数
の書籍情報表.書籍名の箇所を削除する必要があります。(グループ化してないので)
2021.11.16 17:52
GinSanaさん 
FE シルバーマイスター
(No.3)
>ISBNと書籍名は一意に対応しているため
ISBNが決まればその書籍名は一意に決まるけど、書籍名が決まったからといってISBNは決まらんですよ。
2021.11.16 20:30
GinSanaさん 
FE シルバーマイスター
(No.4)
本来は確かにISBNだけでgroup byすれば事足りるわけですが、それをしないのはなぜ?といえば、
そもそもの原理は
GROUP BY句に存在しない列名をSELECT句に指定するとエラーになる
というところからきているわけです。

表示したいのはISBN、番号だけじゃわからんから書籍名もほしいっつって、group byのルールからムダではあるが集約要素を増やしてやっているというのが設問2のSQLです。
with temp as (
isbnだけでカウント
)
temp.isbn, 書籍名, 件数 from 書籍情報表
でtempをインナージョインする
みたいにやれば最小限の要素で集約できます。
2021.11.16 20:43
TKDさん  
(No.5)
なるほど!ありがとうございます
2021.11.18 16:26

返信投稿用フォーム

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

その他のスレッド


Pagetop