こんにちは! saku-chanです!
このアカウントは、社会人1年目のWebディレクター見習い(初心者)がSQLを学ぶ成長記録になっています。
ひよっこから成長する過程を残し、ついでに皆さんからアドバイスを頂けたら良いな! 私と同じように知識ゼロからSQLを始める人の一つの指針になればいいな!という思いで作成しました。
ちなみに、ブログを含め記事などを書いた経験がないため読みづらい部分も多々あるかと思いますが、そこも含めて皆さまアドバイス頂けると嬉しいですmm
◆記事の内容は、SQL初心者の自分が、同じような初心者の方でも理解しやすいように心がけながら、SQLの基本に関して学んだことを懇切丁寧に記載しています◆
目次
はじめに
今回はSQLのSELECT文を構成するGROUP BY句
について勉強したことを記載します!
初めてSQLを勉強する方(プログラミング経験自体がなくてもOK)が気軽に読んでいただける記事になっています^^
ではスタート!
⇒前回の記事【WHERE句】はこちら
⇒前々回の記事【集約関数】はこちら
⇒記事一覧
GROUP BY句とは
GROUP BY句とはなんでしょうか?
名前からして、なんとなくグループ化しそうだなーっとイメージして頂ける気がしますが、
その通り!
データをグループにまとめる働きをもっています。
行をいくつかのグループに分割して、それぞれのグループに対して集約関数を使用することが出来ます。
では実際に具体例をみながら確認していきましょう!
今回使用するテーブルはこちらです。
Table名:quiz_2
number | area | team_name | points |
---|---|---|---|
01 | 東京 | スマイル | 2 |
02 | 大阪 | たこ焼き | 3 |
03 | 東京 | 乃木坂 | 1 |
04 | 福岡 | わんちーむ | 3 |
05 | 大阪 | しらんけど | 7 |
06 | 東京 | ガールズ4 | 3 |
07 | 愛知 | しゃちほこ | 4 |
例えば、areaごとの平均pointsを知りたい時、
下記のようにクエリを記述します。
SELECT area,
AVG(points) AS 平均得点
FROM quiz_2
GROUP BY area;
結果は下記の通りです。
area | 平均得点 |
---|---|
東京 | 2 |
大阪 | 5 |
福岡 | 3 |
愛知 | 4 |
areaに分けて、それぞれのエリアの平均pointsを求めることが出来ました!
(東京の場合、(2+1+3)÷3=2のような感じです。)
また、以前の記事でも触れましたが、AS
を使用することでカラム名を変更することが出来ます。
GROUP BY句を使うときの注意点
GROUP BY句
を使うときの注意点は、GROUP BY句
を使用する時、
SELECT句
には、GROUP BY句
で使用したカラム名または集約関数しか記載することができません。
どういうことかというと、たとえば下記のようなクエリはエラーになります。
SELECT area,team_name
FROM quiz_2
GROUP BY area;
なぜなら、GROUP BY句でareaごとに絞ると、
東京、大阪、福岡、愛知
に分類されますが、SELECT句で指定したチーム名(team_name)が東京には3種類、大阪には2種類存在してしまっているためです。
1つのareaに対してteam_nameカラムにそれぞれどの値をいれれば良いかプログラムが困ってしまうということですね。
ちなみに集約関数はいくつでも記載できます。
以下に例を記載します!
Table名:quiz_2
number | area | team_name | points |
---|---|---|---|
01 | 東京 | スマイル | 2 |
02 | 大阪 | たこ焼き | 3 |
03 | 東京 | 乃木坂 | 1 |
04 | 福岡 | わんちーむ | 3 |
05 | 大阪 | しらんけど | 7 |
06 | 東京 | ガールズ4 | 3 |
07 | 愛知 | しゃちほこ | 4 |
SELECT area,
AVG(points) AS 平均得点,
MAX(points) AS 最高得点,
MIN(points) AS 最低得点
FROM quiz_2
GROUP BY area;
このようなクエリを実行すると、下記のような結果を得ることが出来ます。
area | 平均得点 | 最高得点 | 最低得点 |
---|---|---|---|
東京 | 2 | 3 | 1 |
大阪 | 5 | 7 | 3 |
福岡 | 3 | 3 | 3 |
愛知 | 4 | 4 | 4 |
GROUP BY句
で指定した値に対して集約関数がそれぞれ1行ずつ値を返すことが出来るので、エラーにならずにデータを抽出することが出来るんですね。
まとめ
-
GROUP BY句
は行をいくつかのグループに分割して、それぞれのグループに対して集約関数を使用することが出来る -
GROUP BY句
を使用する時、SELECT句
には、GROUP BY句
で使用したカラム名または集約関数しか記載することが出来ない。
最後に
今回はGROUP BY句
について記事を書いてみました。
GROUP BY句
を使ってエラーになる時はたいていSELECT句にGROUP BY句で使用していないカラム名を書いちゃったときな気がします、、(笑)
落ち着いてそれぞれの句で何をしているのか考えてみるのが大切ですね><
ではまた次回!
⇒記事一覧