戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

データベーススペシャリスト 2009年 午前209


問題文

“社員”表と“人事異動”表から社員ごとの勤務成績の平均を求める適切なSQL文はどれか。ここで、求める項目は、社員コード、社員名、勤務成績(平均)の3項目とする
データベーススペシャリスト 2009年 午前2 問09の問題画像

選択肢

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 社員.社員コード, 社員.社員名

社員ごとの勤務成績の平均を求めるSQL文【午前2 解説】

正解の理由

選択肢イは、社員コードと社員名でグループ化し、AVG(勤務成績)で勤務成績の平均を正しく計算しています。
また、WHERE句で社員コードを結合条件に指定し、社員ごとの勤務成績を正しく紐付けています。
これにより、社員ごとの勤務成績の平均値を正確に取得できるため正解です。

解法ステップ

  1. 「社員」表と「人事異動」表を社員コードで結合する。
  2. 社員ごとに勤務成績の平均を求めるため、社員コードと社員名でグループ化する。
  3. AVG()関数を使って勤務成績の平均を計算する。
  4. SELECT句で社員コード、社員名、勤務成績の平均を指定する。

選択肢別の誤答解説

  • ア:GROUP BY 勤務成績としており、勤務成績ごとにグループ化してしまうため、社員ごとの平均が求められません。
  • :正解。社員コードと社員名でグループ化し、AVG(勤務成績)で平均を正しく計算しています。
  • ウ:AVG(勤務成績)/COUNT(勤務成績)と誤った計算をしており、AVG()関数だけで平均は求められます。
  • エ:MAX(勤務成績)/COUNT(*)と平均ではなく最大値を使っており、正しい平均値が求められません。

よくある誤解

  • GROUP BYに集計対象の列を指定すると、平均値が正しく計算されません。
  • 平均値を自分で計算しようとしてAVG()COUNT()を組み合わせる必要はありません。

補足コラム

SQLの集計関数にはSUM()COUNT()AVG()MAX()MIN()があります。
平均値はAVG()で簡単に求められ、GROUP BY句で集計単位を指定します。
結合時はJOIN句を使うのが一般的ですが、問題文のようにカンマ区切りの結合も可能です。

FAQ

Q: GROUP BY句に複数の列を指定する理由は?
A: 集計単位を複数の列で指定することで、より細かい単位で集計結果を得られます。
Q: AVG()関数はどのように計算される?
A: 対象列の値の合計を件数で割った値を返します。自分で計算する必要はありません。

関連キーワード: SQL, 集計関数、GROUP BY, 平均値、テーブル結合、SELECT文
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

データベーススペシャリスト
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について