初級シスアド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句で指定されていなければならない。