ここから本文です

SQL初心者です

eri********さん

2011/9/2413:41:39

SQL初心者です

SQLを勉強しています(基本情報技術者試験向け)
グループ化に関してわからないので教えてください。

社員表
番号 年齢 部署
001 20 人事
002 30 人事
003 40 営業

この表から部署ごとの年齢の合計を求めるSQL文は理解できます。
select 部署, sum(年齢) from 社員表 group by 部署

結果
部署 sum(年齢)
人事 50
営業 40

この社員表に対して以下のSQLを実行するとどうなりますか
select 部署, sum(年齢) from 社員表

グループ化をしないとどうなるんでしょうか?
エラーになるんでしょうか?

例えば、以下は
select sum(年齢) from 社員表
結果
sum(年齢)
90
と合計が1行で表示されると思います。

質問のSQL文は、私が考える限りこの1行の結果と一緒に、部署の列も取り出せといっていると思います。
結果
部署 sum(年齢)
人事 ??
人事 ??
営業 ??

「??」の部分はどうなるのでしょう?
テキストなどには、このような構文は説明がされていません。
エラーになるのなら、どのような理屈回路でエラーと判定されるのか教えてください。

よろしくお願いします。

補足nora1962jpさん
早速の回答ありがとうございます
回答について質問なんですが、
「SELECT句で列挙できるのはグループ化項目と算出項目に限られている」
というのは、
SUM、AVG、COUNTなどの関数をselect句に入れた場合は、
グループ化しなければ部署などの列を入れることはできないということでよいのでしょうか?

すみません、回答お願いできますか?

閲覧数:
268
回答数:
1

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

nora1962jpさん

編集あり2011/9/2423:57:43

SQLの規格上はエラーになります。これは規格でSELECT句で列挙できるのはグループ化項目と算出項目に限られているせいです。
しかし、MySQLはSQLの標準規格から外れていてグループ化項目を指定してもエラーにはなりません。ただし、その場合にどの行の値を採用するかは不定です。

【補足】
> SUM、AVG、COUNTなどの関数をselect句に入れた場合は、
> グループ化しなければ部署などの列を入れることはできない
> ということでよいのでしょうか?

というより「SUM、AVG、COUNTなどの関数」以外は
GROUP BY で指定した項目しか入れることができません。
MySQLでは通ってしまいますが、その他のRDBMSではエラー
になります。
MySQLでは値は返りますが、複数ある値のどれを返すかは
保証はありません。

質問した人からのコメント

2011/9/25 11:17:06

ありがとうございました

データベースは苦手なのでもっと勉強しようと思います

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる