“社員”表と“人事異動”表から社員ごとの勤務成績の平均を求める適切な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 |