初級シスアドSQL過去問題解説

解答:ウ

問題文より、「部署ごとの平均給料」という記述がある。したがって、部署でグループ化をおこなう必要がある。解答群を見ると、 「部署」でグループ化をおこなっているのは、(ウ)だけである。

解答を見つけるのは簡単な問題だが、SELECT文の勉強のために解答群のSELECT文を1つずつ検討していく。

SELECT 部署コード,部署名,AVG(給料)
部署コード、部署名と給与の平均の列を抽出する
FROM 表A,表B
表Aと表Bより
ORDER BY 部署コード
部署コードの昇順に並べ替えを行う

FROM句で表A,表Bと指定しているが、表の結合条件がない。したがって、SELECT文の構文エラーである。

SELECT 部署コード,部署名,AVG(給料)
部署コード、部署名と給与の平均の列を抽出する
FROM 表A,表B
表Aと表Bより
WHERE 表A.所属コード=表B.部署コード
表Aの所属コードと表Bの一致した行を抽出する(表の結合条件)

SELECT句で「AVG(給料)」と指定しているが、グループ化(GROUP BY句)の指定がないので、このSELECT文は実行できない。

SELECT 部署コード,部署名,AVG(給料)
「部署コード」、「部署名」と給与の平均の列を抽出
FROM 表A,表B
表Aと表Bより
WHERE 表A.所属コード=表B.部署コード
表Aの所属コードと表Bの一致した行を抽出する(表の結合条件)
GROUP BY 部署コード,部署名
「部署コード」と「部署名」でグループ化する

以上から実行結果は次のようになる。部署ごとの平均給料が得られている。

実行結果
部署コード部署名AVG(給料)
101第一営業225000
102第二営業325000
201総務275000

SELECT 部署コード,部署名,AVG(給料)
「部署コード」、「部署名」と給与の平均の列を抽出
FROM 表A,表B
表Aと表Bより
WHERE 表A.所属コード=表B.部署コード
表Aの所属コードと表Bの一致した行を抽出する(表の結合条件)
ORDER BY 部署コード
「部署コード」の昇順に並べ替えを行う

SELECT句で「AVG(給料)」と指定しているが、グループ化されていないので、このSELECT文は実行できない。

グループ関数を使って集計をおこなうときは、グループ関数と計算式を除いて、SELECTで指定したた列がGROUP BY句で指定されていなければならない

関連ページ
SQL講座グループ化
初級シスアドSQL過去問題平成16年春期問27