平成21年 春期 データベーススペシャリスト 午前II 問9

“社員”表と“人事異動”表から社員ごとの勤務成績の平均を求める適切なSQL文はどれか。
ここで、求める項目は、社員コード、社員名、勤務成績(平均)の3項目とする。

社員
社員コード 社員名 性別 生年月日 入社年月日
O1553 太田 由美 1970-03-10 1990-04-01
S3781 佐藤 義男 1943-11-20 1975-06-11
O8665 太田 由美 1978-10-13 1999-04-01
人事異動
社員コード 配属部門 配属年月日 担当勤務内容 勤務成績
O1553 総務部 1990-04-01 広報(社内報) 69.0
O1553 営業部 1998-07-01 顧客管理 72.0
S3781 資材部 1975-06-11 仕入在庫管理 70.0
S3781 経理部 1984-07-01 資金計画 81.0
S3781 企画部 1993-07-11 会社組織、分掌 95.0
O8665 秘書室 1999-04-01 受付 70.0

 ア  SELECT 社員.社員コード, 社員名, AVG(勤務成績) AS “勤務成績(平均)”
   FROM 社員, 人事異動
   WHERE 社員.社員コード = 人事異動.社員コード
   GROUP BY 勤務成績
 イ  SELECT 社員.社員コード, 社員名, AVG(勤務成績) AS “勤務成績(平均)”
   FROM 社員, 人事異動
   WHERE 社員.社員コード = 人事異動.社員コード
   GROUP BY 社員.社員コード, 社員.社員名
 ウ  SELECT 社員.社員コード, 社員名, AVG(勤務成績)/COUNT(勤務成績) AS “勤務成績(平均)”
   FROM 社員, 人事異動
   WHERE 社員.社員コード = 人事異動.社員コード
   GROUP BY 社員.社員コード, 社員.社員名
 エ  SELECT 社員.社員コード, 社員名, MAX(勤務成績)/COUNT(*) AS “勤務成績(平均)”
   FROM 社員, 人事異動
   WHERE 社員.社員コード = 人事異動.社員コード
   GROUP BY 社員.社員コード, 社員.社員名


答え イ


解説
“AVG()”が平均値を求めるSQL句なので選択肢ウの“AVG(勤務成績)/COUNT(勤務成績)”は平均値を求める内容になっていない。また、選択肢エの“MAX(勤務成績)/COUNT(*)”は勤務成績に最大値(MAX)を使っているのでこれも平均値にはならない。
また、同じ社員の情報をまとめるための“GROUP BY”句で使用する属性は社員コード及び社員名である。


キーワード
・AVG
・GROUP BY

キーワードの解説
  • AVG
    複数のレコードの指定された属性の平均値を求めるSQL文です。
  • GROUP BY
    指定された属性の値が一致するレコードをまとめるSQL文です。

もっと、「SQL」について調べてみよう。

戻る 一覧へ 次へ