HOME»基本情報技術者試験掲示板»令和元年秋期午後問3
投稿する

令和元年秋期午後問3 [3849]

 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さん(No.2) 
FE プラチナマイスター
例のように変更を行った場合はSELECT文で抽出する列も変更しなければ構文エラーを起こすと思います。
>例:GROUP BY 書籍情報表.ISBNコード, 書籍情報表.書籍名  →  GROUP BY 書籍情報表.ISBNコード
このように変更した場合は、
>SELECT 書籍情報表.ISBNコード, 書籍情報表.書籍名 , COUNT(*) AS 貸出回数
の書籍情報表.書籍名の箇所を削除する必要があります。(グループ化してないので)
2021.11.16 17:52
GinSanaさん(No.3) 
FE シルバーマイスター
>ISBNと書籍名は一意に対応しているため
ISBNが決まればその書籍名は一意に決まるけど、書籍名が決まったからといってISBNは決まらんですよ。
2021.11.16 20:30
GinSanaさん(No.4) 
FE シルバーマイスター
本来は確かに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日経過したスレッドへの投稿はできません。
© 2010- 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop