本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

平成23年度 春期 応用情報技術者試験問題と解説

問30

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

社員
┌─────┬────┬──┬─────┬─────┐
│社員コード│ 社員名 │性別│ 生年月日 │入社年月日│
┝━━━━━┿━━━━┿━━┿━━━━━┿━━━━━┥
│O1553│太田由美│ 女 │1970-03-10│1990-04-01│
├─────┼────┼──┼─────┼─────┤
│S3781│佐藤義男│ 男 │1943-11-20│1975-06-01│
├─────┼────┼──┼─────┼─────┤
│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-01│会社組織、分掌│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 社員.社員コード, 社員.社員名


正解


解説

ア GROUP BY 句で使用した勤務成績をAVG関数で使用しているため、構文エラーとなる。

イ 正しい。
SELECT 社員.社員コード, 社員名, AVG(勤務成績) 
             AS "勤務成績(平均)"
  FROM 社員, 人事異動
  WHERE 社員.社員コード = 人事異動.社員コード
  GROUP BY 社員.社員コード, 社員.社員名
の意味は、以下のとおり。
“社員表”と, “人事異動”表から、社員コードが一致するレコードを取り出し、社員コード、社員名単位でグループ化して“社員”表の社員コードと、社員名と、“勤務成績(平均)”というタイトルで勤務成績の平均を出力する。

ウ AVG(勤務成績) / COUNT(勤務成績) について、勤務成績の平均を求め、さらに、グループごとのデータ数で割っているため勤務成績 (平均) を正しく求められない。

エ MAX(勤務成績) / COUNT(*) について、勤務成績の最高値を、全体の行数で割っているため、勤務成績 (平均) を正しく求められない。

問29 目次 問31