Webサイト制作コースのお申し込みはこちら

MySQLに実装されている”GROUP BY”句を使えば、指定したカラムをまとめてグループ化することが出来ます。

このGROUP BY句を使うことでデータの数を数えたり、平均値などの計算を容易にさせることが出来るようになります。

今回はこのGROUP BYについて解説していきますので是非覚えてみてください。

データのグループ化

“GROUP BY”句はSELECT句と並行して使用することで、指定したカラムを基準としたグループにまとめて取得できます。

記述は以下のようになります。

SELECT [カラム名] FROM [テーブル名] GROUP BY [カラム名];

値を計算させたい場合には、この様式に更にCOUNT関数などを足すことで指定したカラムを基準として計算させることも出来ます。

COUNT関数を使った記述例は以下の通りです。

SELECT [カラム名], COUNT([カラム名]) FROM [テーブル名] GROUP BY [カラム名];

なおグループ化すると取得できるデータはグループだけとなります。

グループ化されたデータから条件を指定し、その条件に合うものだけを抽出する場合には、更にHAVING 句で抽出条件を記述します。

この場合の記述は以下の通りとなります。

SELECT [カラム名], COUNT([カラム名]) FROM [テーブル名] GROUP BY [カラム名] HAVING [抽出条件];
ポテパンダの一言メモ

WHERE句とHAVING句の違いについて

WHERE句とHAVING句は同じような動きに思えますが、優先順位が全く異なります。

具体的な違いは以下の通りです。

WHERE句=グループ化する前に条件を抽出

HAVING句=グループ化した後で条件を抽出

MySQLでの動きを見る

では実際にMySQLでの動きを見ていきましょう。

まずは予め作っておいた表を見てみましょう。

+----+--------+-------+-------+
| id | type   | color | price |
+----+--------+-------+-------+
|  1 | Bag    | white |  5000 |
|  2 | Bag    | black |  2500 |
|  3 | Bag    | black | 20000 |
|  4 | Wallet | white | 15000 |
|  5 | Wallet | black |  6000 |
|  6 | Bag    | black | 30000 |
|  7 | Bag    | white |  1500 |
|  8 | Wallet | black |  4500 |
|  9 | Other  | black |  3500 |
+----+--------+-------+-------+

このようなテーブルがあるとします。

まずは基本的なGROUP BYのみを使用してグループ化させてみましょう。

select type from sample_db.sample_table group by type;
+--------+
| type   |
+--------+
| Bag    |
| Other  |
| Wallet |
+--------+
3 rows in set (0.000 sec)

グループで表示させると、リストの中には3種類のアイテムがあることが確認できます。

では次に、type毎にpriceの合計を表示させてみましょう。

合計を出すにはSUM関数を使用します。

select type, sum(price) from sample_db.sample_table group by type;
+--------+------------+
| type   | sum(price) |
+--------+------------+
| Bag    |      59000 |
| Other  |       3500 |
| Wallet |      25500 |
+--------+------------+
3 rows in set (0.000 sec)

SUM関数を使用することで、種類毎に合計金額がいくらになるのかを出力出来たことが確認できます。

続いてもう少し詳細にグループ化し、”type”と”color”の二つのグループで合計金額を出してみましょう。

select type, color, sum(price) from sample_db.sample_table group by type, color;
+--------+-------+------------+
| type   | color | sum(price) |
+--------+-------+------------+
| Bag    | black |      52500 |
| Bag    | white |       6500 |
| Other  | black |       3500 |
| Wallet | black |      10500 |
| Wallet | white |      15000 |
+--------+-------+------------+
5 rows in set (0.000 sec)

上のクエリでは、BagとWallet、そしてOtherをそれぞれ色毎にグループ化し、その合計金額を算出したクエリとなっています。

結果を見ると”type”と”color”でグループ化され出力されていることが確認できます。

COUNT関数を使う

先ほども簡単に触れたように、COUNT関数を使えば指定したカラムをグループ化した上でグループ内の数を出力させることが出来ます。

下の例を見てみましょう。

select type, count(type) as Expensive from sample_db.sample_table where price > 10000 group by type;
+--------+-----------+
| type   | Expensive |
+--------+-----------+
| Bag    |         2 |
| Wallet |         1 |
+--------+-----------+
2 rows in set (0.000 sec)

上のクエリでは10000円以上の価格のアイテム個数を表示させています。

Bagには2つ、Walletには1つのアイテムが存在することが確認できます。

更にこの条件にHAVINGを使って2つ以上のアイテムが存在するレコードを表示させてみます。

select type, count(type) as Expensive from sample_db.sample_table where price > 10000 group by type having 2 <= Expensive;
+------+-----------+
| type | Expensive |
+------+-----------+
| Bag  |         2 |
+------+-----------+
1 row in set (0.000 sec)

このように、GROUP BYの後ろに更に続けてHAVING句で条件を指定することで、より厳格な条件を指定し抽出することが確認できます。

まとめ

いかがでしたか?

今回はGROUP BY句について色々なケースを紹介しながら解説してみました。

データを表示させる際にはデータベース内で出来ることは完結に済ませた方が良い場合も多くあります。

また場合によっては表示されるまでの時間やサーバーに係る負荷の軽減にも一役買ってくれることもあります。

これらのコマンドを駆使してデータを効率よく取り出せるよう何度も繰り返し練習してみましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。