平成23年度特別 応用情報技術者試験 午前 問30

分野:データベース(関係モデル・正規化・SQL・トランザクション/排他制御・障害回復・NoSQL・データベース設計)|実際に出題されたIPA過去問題

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

問題の図表(IPA公式問題冊子より引用)
図表:IPA公式問題冊子より
  1.  SELECT 社員.社員コード,社員名,AVG(勤務成績) AS "勤務成績(平均)" FROM 社員,人事異動 WHERE 社員.社員コード = 人事異動.社員コード GROUP BY 勤務成績
  2.  SELECT 社員.社員コード,社員名,AVG(勤務成績) AS "勤務成績(平均)" FROM 社員,人事異動 WHERE 社員.社員コード = 人事異動.社員コード GROUP BY 社員.社員コード,社員.社員名
  3.  SELECT 社員.社員コード,社員名,AVG(勤務成績)/COUNT(勤務成績) AS "勤務成績(平均)" FROM 社員,人事異動 WHERE 社員.社員コード = 人事異動.社員コード GROUP BY 社員.社員コード,社員.社員名
  4.  SELECT 社員.社員コード,社員名,MAX(勤務成績)/COUNT(*) AS "勤務成績(平均)" FROM 社員,人事異動 WHERE 社員.社員コード = 人事異動.社員コード GROUP BY 社員.社員コード,社員.社員名
解答・解説を見る

正解:イ

AI解説

社員ごとの勤務成績の平均を求めるには、集約関数AVGを使い、集約単位を社員(社員コードと社員名)ごとにGROUP BYで指定する必要がある。イは社員コード・社員名でGROUP BYしており、社員ごとの平均が正しく求まるため正解となる。 ア: GROUP BYの対象が「勤務成績」になっており、これでは勤務成績の値ごとにグループ化されてしまい、社員ごとの平均を求めるという目的を達成できない。 イ: 社員の社員コードと社員名でGROUP BYし、AVG(勤務成績)で平均を算出しており、設問の要求(社員ごとの勤務成績の平均)を正しく満たしている。 ウ: AVG(勤務成績)/COUNT(勤務成績)という式は、平均値をさらに件数で割ってしまっており、求めたい「平均」の値にはならない誤った計算式である。 エ: MAX(勤務成績)/COUNT(*)という式は、最大値を件数で割るという計算であり、平均値の算出方法として意味をなさない誤った式である。 💡 SQLのGROUP BYは、SELECT句に書く非集約関数の列(ここでは社員コード・社員名)をすべて指定するのが基本ルールと覚えておく。

出典:平成23年度 特別 応用情報技術者試験 午前 問30 / 独立行政法人情報処理推進機構(IPA)
※Web掲載用に表記を一部変更しています。図表はIPA公式問題冊子から引用しています。著作権はIPAに帰属します。
📱 演習アプリで解く(無料・登録不要・2,640問収録)

「データベース」分野の攻略ポイント

関係モデル・正規化・SQL・トランザクション管理・障害回復・データベース設計が中心です。計算問題は少なく、定義と手順を正確に覚えていれば確実に得点できる、いわば「取りこぼしてはいけない」分野です。特に正規形とACID特性は毎年のように形を変えて出ます。

データベースの攻略ポイントをすべて見る(要点5項目・ひっかけ3項目)→

同じ分野(データベース(関係モデル・正規化・SQL・トランザクション/排他制御・障害回復・NoSQL・データベース設計))の過去問