HOME»応用情報技術者試験掲示板»データベース問題についての疑問
投稿する
データベース問題についての疑問 [0153]
質問さん(No.1)
よろしくお願いします。
過去問で個人的に未解決の疑問があるので教えていただきたいです。
疑問とは、GROUP BY ,ORDER BY の後に続く文についてです。
3つ質問があります。(1)(2)(3)
24年春午後問6の図書館問題の図1で
GROUP BY 書籍名,著者名,出版社名,書籍B.ISBN番号
となっていますが、(1)これはなぜGROUP BY 書籍名(または万一書籍名が同じ別の本がある場合に備えてGROUP BY 書籍B.ISBN番号 の方がいいか)
ではないのでしょうか?著者名,出版社名を付ける理由が分かりません。
23年秋午後問6の旅費精算問題の図4の g に
GROUP BY 申請書.組織コード, 組織.組織名
Order by 申請書.組織コード
となっていますが、(2)Order by 組織.組織コード では駄目な理由が分かりません。
それと、 GROUP BY 申請書.組織コード, 組織.組織名 の所は、(3)なぜ GROUP BY 申請書.組織コード では駄目なのでしょうか?
過去問で個人的に未解決の疑問があるので教えていただきたいです。
疑問とは、GROUP BY ,ORDER BY の後に続く文についてです。
3つ質問があります。(1)(2)(3)
24年春午後問6の図書館問題の図1で
GROUP BY 書籍名,著者名,出版社名,書籍B.ISBN番号
となっていますが、(1)これはなぜGROUP BY 書籍名(または万一書籍名が同じ別の本がある場合に備えてGROUP BY 書籍B.ISBN番号 の方がいいか)
ではないのでしょうか?著者名,出版社名を付ける理由が分かりません。
23年秋午後問6の旅費精算問題の図4の g に
GROUP BY 申請書.組織コード, 組織.組織名
Order by 申請書.組織コード
となっていますが、(2)Order by 組織.組織コード では駄目な理由が分かりません。
それと、 GROUP BY 申請書.組織コード, 組織.組織名 の所は、(3)なぜ GROUP BY 申請書.組織コード では駄目なのでしょうか?
2012.10.29 15:42
pinlivreさん(No.2)
拙い文章ですが、下記理由によるものだと思います。
標準SQLにおいてGROUP BYを使用する場合のSELECT句には
「GROUP BY句で指定したカラム」と「集合関数」と「固定文字列」しか
指定できないためです。
単純に貸出可能冊数を求めるだけなら、
仰られるように「書籍B.ISBN番号」だけのGROUP BYでもよいと思います。
しかし、統合検索サービスの出力情報として
書籍名、著者名、出版社名も必要としており
VIEW作成時のSELECT句にそれらを指定するために
[GROUP BY 書籍名, 著者名, 出版社名, 書籍B.ISBN番号]
と必要カラムを全て記述しています。
(「GROUP BY句で指定したカラム」以外のカラムは
値が複数ある可能性があり、何を出力したらよいか分からないからですね。
今回はたまたま、「ISBN番号」さえ決まれば
値は一つに定まってしまいますが、、、)
SELECT句と同じくORDER BY句も
「GROUP BY句で指定したカラム」と「集合関数」しか指定できないためです。
問題の図4では
[GROUP BY 申請書.組織コード, 組織.組織名]
となっており組織.組織コードが含まれていないため、
[ORDER BY 組織.組織コード]とするとエラーとなります。
(1)のご質問に対する回答と同じ理由ですが、
標準SQLにおいてGROUP BYを使用する場合のSELECT句には
「GROUP BY句で指定したカラム」と「集合関数」と「固定文字列」しか
指定できないためです。
各組織ごとのレポートの出力情報に
組織名も必要としているため
情報取得の際のSELECT句に指定できるよう、
[GROUPBY 申請書.組織コード, 組織.組織名]
と、組織.組織名も含めています。
参考サイトを提示できればよかったのですが、
Oracle、MySQL等々各種DBMSに依存してしまうところが多く
見つけられませんでした。。。
参考書をお持ちでしたら、
SQLのGROUP BY句の説明箇所に似たようなことが記述されてるかと思います。
以上、少しでも解決のお役に立てれば幸いです。
>(1)
標準SQLにおいてGROUP BYを使用する場合のSELECT句には
「GROUP BY句で指定したカラム」と「集合関数」と「固定文字列」しか
指定できないためです。
単純に貸出可能冊数を求めるだけなら、
仰られるように「書籍B.ISBN番号」だけのGROUP BYでもよいと思います。
しかし、統合検索サービスの出力情報として
書籍名、著者名、出版社名も必要としており
VIEW作成時のSELECT句にそれらを指定するために
[GROUP BY 書籍名, 著者名, 出版社名, 書籍B.ISBN番号]
と必要カラムを全て記述しています。
(「GROUP BY句で指定したカラム」以外のカラムは
値が複数ある可能性があり、何を出力したらよいか分からないからですね。
今回はたまたま、「ISBN番号」さえ決まれば
値は一つに定まってしまいますが、、、)
>(2)
SELECT句と同じくORDER BY句も
「GROUP BY句で指定したカラム」と「集合関数」しか指定できないためです。
問題の図4では
[GROUP BY 申請書.組織コード, 組織.組織名]
となっており組織.組織コードが含まれていないため、
[ORDER BY 組織.組織コード]とするとエラーとなります。
>(3)
(1)のご質問に対する回答と同じ理由ですが、
標準SQLにおいてGROUP BYを使用する場合のSELECT句には
「GROUP BY句で指定したカラム」と「集合関数」と「固定文字列」しか
指定できないためです。
各組織ごとのレポートの出力情報に
組織名も必要としているため
情報取得の際のSELECT句に指定できるよう、
[GROUPBY 申請書.組織コード, 組織.組織名]
と、組織.組織名も含めています。
参考サイトを提示できればよかったのですが、
Oracle、MySQL等々各種DBMSに依存してしまうところが多く
見つけられませんでした。。。
参考書をお持ちでしたら、
SQLのGROUP BY句の説明箇所に似たようなことが記述されてるかと思います。
以上、少しでも解決のお役に立てれば幸いです。
2012.10.30 12:34
質問さん(No.3)
pinlivreさん
完璧な回答ありがとうございました。
一点の曇り無く解決しました。
完璧な回答ありがとうございました。
一点の曇り無く解決しました。
2012.10.30 17:22