平成23年度 特別 応用情報技術者試験 午前 問30
テクノロジ/データベース“社員”表と“人事異動”表から社員ごとの勤務成績の平均を求める適切な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-01:会社組織,分掌:95.0 O8665:秘書室:1999-04-01:受付:70.0 (注:本サイトでは原問題の表を文字表記に変換しています)
出典:平成23年度 特別 応用情報技術者試験 午前 問30
- ア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(勤務成績)を求める必要があります。GROUP BY句に社員コードと社員名の両方を指定することで,同じ社員コードをもつ複数の異動履歴が正しく1つのグループにまとまります。
選択肢ごとの解説
- ア誤り。GROUP BYに勤務成績を指定すると,社員ごとではなく勤務成績の値ごとにグループ化されてしまい,求める集計になりません。
- イ正しい。社員コードと社員名でグループ化してAVG(勤務成績)を求めることで,社員ごとの平均勤務成績を正しく算出できます。
- ウ誤り。AVG(勤務成績)/COUNT(勤務成績)は平均をさらに件数で割ってしまう誤った計算式です。
- エ誤り。MAX(勤務成績)/COUNT(*)は最大値を件数で割るもので,平均値の計算にはなりません。