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

応用情報技術者 2011年 春期 午前230


問題文

“社員”表と“人事異動”表から社員ごとの勤務成績の平均を求める適切な SQL文はどれか。ここで、求める項目は、社員コード、社員名、勤務成績(平均)の3項目とする。
応用情報技術者 2011年 春期 午前2 問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 社員.社員コード、 社員.社員名

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

要点まとめ

  • 結論:社員コードと社員名でグループ化し、勤務成績の平均を求めるSQL文が正解です。
  • 根拠:平均値を求める際は、集計関数AVGを使い、対象の社員ごとにグループ化する必要があります。
  • 差がつくポイント:GROUP BY句の指定が正しくないと、正しい平均値が算出できず誤答になります。

正解の理由

選択肢イは、社員テーブルと人事異動テーブルを社員コードで結合し、社員コードと社員名でグループ化しています。これにより、各社員ごとの勤務成績の平均を正しく計算できます。AVG関数を使って勤務成績の平均を求めているため、求める3項目(社員コード、社員名、勤務成績(平均))を正確に取得可能です。

よくある誤解

GROUP BY句に勤務成績を指定すると、勤務成績ごとにグループ化されてしまい、社員ごとの平均が求められません。平均値の計算方法を誤解しやすい点に注意が必要です。

解法ステップ

  1. 社員テーブルと人事異動テーブルを社員コードで結合する。
  2. SELECT句で社員コード、社員名、勤務成績の平均を指定する。
  3. GROUP BY句で社員コードと社員名を指定し、社員ごとに集計する。
  4. AVG関数を使って勤務成績の平均を計算する。
  5. SQL文の文法ミスがないか確認する。

選択肢別の誤答解説

  • ア:GROUP BY句に勤務成績を指定しているため、勤務成績ごとにグループ化され、社員ごとの平均が求められません。
  • :正解。社員コードと社員名でグループ化し、AVG関数で平均を正しく計算しています。
  • ウ:AVG関数の結果をさらにCOUNTで割っているため、平均値が二重に計算され誤りです。
  • エ:MAX関数を使っているため、最大値をカウント数で割る誤った計算となり、平均値は求められません。

補足コラム

SQLで集計を行う際は、GROUP BY句に集計対象のキーを正しく指定することが重要です。AVG関数は指定したカラムの平均値を自動で計算するため、COUNTで割る必要はありません。また、複数テーブルの結合時は結合条件を明確にし、必要なカラムを正しく指定しましょう。

FAQ

Q: なぜGROUP BYに社員コードと社員名の両方が必要ですか?
A: 社員コードは社員を一意に識別しますが、社員名も表示したいため両方をGROUP BYに含めます。
Q: AVG関数の代わりにSUMとCOUNTを使うことはできますか?
A: 可能ですが、AVG関数を使う方が簡潔でミスが少ないため推奨されます。

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

\ せっかくなら /

応用情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

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

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