DBデータベーススペシャリスト試験 午前Ⅱ
平成21年度春期 データベーススペシャリスト 午前Ⅱ 問9
問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。
問題

選択肢
- ア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の抽出条件と結果を対応づけるときは、条件式の各部分がどの行の採否に関わるかを整理し、処理対象・比較対象・結合した情報の範囲を分けて確認します。表面的な並びだけで判断せず、条件が評価される単位に注目してください。
この問題で問われていること
特に、抽出条件が参照する列や値の関係を、行ごとの判定という観点で読み取ってください。複数の条件がある場合は、それぞれの役割を分離し、全体としてどの範囲を対象にしているかを確認するのがポイントです。
視点
SQLでは、条件が参照する対象と評価される単位を整理すると、抽出結果との対応を考えやすくなります。列、値、行、表の範囲を混同せず、各条件が担う役割を分けて捉えましょう。
確認ポイント
- 条件が参照する列と比較対象を区別できているか
- 条件が適用される行や表の範囲を整理できているか
- 複数条件の関係を個別に読み、結果の並びと混同していないか
正解と解説を見る
正解
イ
解説
社員コードで2表を結合し、社員コードと社員名を単位にグループ化して勤務成績をAVGで集計する。これにより、社員ごとに勤務成績の平均を1行ずつ求められる。
理由
人事異動表には社員ごとに複数の勤務成績があるため、社員コードを結合キーとして社員表と結合する。その後、社員コードと社員名ごとにグループ化し、AVG(勤務成績)を計算すると、求める3項目を社員単位で取得できる。
比較
GROUP BYに勤務成績を指定すると成績ごとに分割され、社員別平均にならない。また、AVGをさらにCOUNTで割ったり、MAXを使ったりすると、勤務成績の平均を直接求める処理とは異なる。
選択肢ア
これは不正解だよ。社員表と人事異動表を社員コードで結合し、AVGを使っている点は適切だが、GROUP BYで勤務成績を指定している。これでは成績の値ごとにグループが分かれ、社員ごとの平均を求める集計単位にならない。
選択肢イ(正解)
これは正解だよ。社員コードを結合条件にして2表を対応付け、AVG(勤務成績)で平均を計算している。さらに、SELECT句で集約せず表示する社員コードと社員名をGROUP BYに指定しているため、社員ごとに勤務成績の平均を取得できる。
選択肢ウ
これは不正解だよ。GROUP BYの指定は社員コードと社員名なので集計単位は適切だが、AVG(勤務成績)はすでに平均値である。そこからCOUNT(勤務成績)でさらに割るため、社員ごとの勤務成績の平均ではない値になる。
選択肢エ
これは不正解だよ。社員ごとにグループ化している点は適切だが、MAX(勤務成績)は各社員の最大値であり、平均値ではない。その最大値をCOUNT(*)で割っても、複数の勤務成績を平均する計算にはならない。
学習のポイント
AVGとGROUP BYの役割、およびSELECT句の列との対応を理解する。
出典:独立行政法人 情報処理推進機構(IPA)平成21年度春期 データベーススペシャリスト試験 午前Ⅱ 問9(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針