問30 SQL
“社員”表と“人事異動”表から社員ごとの勤務成績の平均を求める適切なSQL文はどれか。ここで、求める項目は、社員コード、社員名、勤務成績(平均)の3項目とする。
ア
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 社員.社員コード, 社員.社員名
問題ごとに異なっているのは1行目と4行目だけですから、そこに注目しましょう。
AVG関数は対象となる列に含まれる行の加算平均を求めてくれるので、COUNTで割る必要はありません。
また、そのまま勤務成績をAVGしてしまうと、すべての社員の平均が出てきてしまいますから、
まずはGROUP関数で各社員ごとにまとめてから演算する必要があります。
答えはイです。