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

SQLのGROUP BYと言えば、SELECTステートメントとセットで使用することで、指定したカラムの値をもとにグループ化をおこなうことができる命令文でしたね。実はそんなSQLのGROUP BYは、単一のカラムだけではなく複数カラムを集計することができるのです。今回は、SQLのGROUP BYで複数カラムを集計する方法について説明していきます。

SQLのGROUP BYとは?

まずはSQLのGROUP BYについて、その使用方法の確認をしていきましょう。先ほども述べた通り、SQLのGROUP BYとは、SELECTステートメントとセットで使用することによって指定したカラムの集計をすることができるものです。以下に使用例を記載するため、参考にしてください。

前提として、以下のようなテーブルがあるとしましょう。

mysql> SELECT * FROM foods;
+---------+------+
| food    | type |
+---------+------+
| Banana  |    1 |
| Apple   |    1 |
| Bread   |    3 |
| Cookie  |    3 |
| Beef    |    2 |
| Chicken |    2 |
+---------+------+
6 rows in set (0.00 sec)

上記の「foods」テーブルは、foodカラムに食べ物の名前が書かれており、typeカラムには食べ物のタイプが書かれています。一覧した際にタイプごとにいくつの食べ物があるのかを調べる際、SQLのGROUP BYが便利です。

以下のようなステートメントを入力しましょう。

mysql> SELECT type, COUNT(type) FROM foods GROUP BY type;

以下は、上記ステートメントの出力結果です。

+------+-------------+
| type | COUNT(type) |
+------+-------------+
|    1 |           2 |
|    3 |           2 |
|    2 |           2 |
+------+-------------+
3 rows in set (0.00 sec)

上記のGROUP BYを含んだSELECTステートメントを入力することによって、typeの種類別に個数がカウントされました。GROUP BYを使うことによって、簡単にテーブルごとに指定した値で集計が可能となるのです。

SQLのGROUP BYで複数のカラムを集計!

上記の例では、GROUP BYを使って単一のカラムを集計しました。しかし、GROUP BYの使い道は単一カラムにとどまらず、複数のカラムを集計することもできるのです。こちらでは実際の手順を丁寧に解説していきますので、ぜひ手を動かして、GROUP BYの使い方に慣れていきましょう。

ちなみに今回はMySQLを使用していきます。MySQLはバージョンによって動作が異なるケースもありますので、以下に今回使用したMySQLのバージョンを記しておきます。もし途中でエラーが発生した場合は、こちらも確認してみてください。

$ mysql --version
mysql  Ver 8.0.18 for osx10.15 on x86_64 (Homebrew)

準備

まずはMySQLを使用するための準備をしていきます。

MySQLのインストール・接続

まだMySQLをインストールしていない場合は、インストールしましょう。

$ brew install mysql

MySQLのインストールが終了したら、接続します。

$ sudo mysql -u root -p

データベースの作成

次にデータベースをMySQL上に作成し、使用するデータベースを指定しましょう。

mysql> CREATE DATABASE potepan;
Query OK, 1 row affected (0.00 sec)

mysql> USE potepan;

これでMySQLを使用する準備は完了しました。

テーブルの作成

それでは、実際にGROUP BYとCOUNTを組み合わせるハンズオンで使用するテーブルを作成しましょう。

mysql> CREATE TABLE score (name VARCHAR(20), class INT, Japanese INT, English INT, Math INT);Query OK, 0 rows affected (0.02 sec)

上記のSQLステートメントで以下のようなテーブルができました。

mysql> DESC score;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| name     | varchar(20) | YES  |     | NULL    |       |
| class    | int(11)     | YES  |     | NULL    |       |
| Japanese | int(11)     | YES  |     | NULL    |       |
| English  | int(11)     | YES  |     | NULL    |       |
| Math     | int(11)     | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

レコードの挿入

先ほど作成したscoreテーブルにレコードを挿入していきましょう。

mysql> INSERT INTO score VALUES("TARO", 1, 39, 98, 67),("HANAKO", 2, 75, 98, 13),("ICHIRO", 2, 62, 88, 71),("YOSHIKO", 1, 76, 43, 92),("SABURO", 2, 83, 51, 66);
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

これでテーブルは以下の状態になりました。

mysql> SELECT * FROM score;
+---------+-------+----------+---------+------+
| name    | class | Japanese | English | Math |
+---------+-------+----------+---------+------+
| TARO    |     1 |       39 |      98 |   67 |
| HANAKO  |     2 |       75 |      98 |   13 |
| ICHIRO  |     2 |       62 |      88 |   71 |
| YOSHIKO |     1 |       76 |      43 |   92 |
| SABURO  |     2 |       83 |      51 |   66 |
+---------+-------+----------+---------+------+
5 rows in set (0.00 sec)

上記の表を見て分かる通り、国語・英語・数学の点数が各生徒ごとに管理され、生徒のクラス番号も分かるテーブルとなります。

SQLのGROUP BYで複数カラムの集計に挑戦

早速、SQLのGROUP BYで複数カラムの集計にトライしてみましょう。ここではクラスごとの点数を3科目ごとに平均化してみます。

以下のステートメントを入力しましょう。

mysql> SELECT class, AVG(Japanese), AVG(English), AVG(Math) FROM score GROUP BY class;

上記のステートメントを入力した結果、以下が出力されました。

+-------+---------------+--------------+-----------+
| class | AVG(Japanese) | AVG(English) | AVG(Math) |
+-------+---------------+--------------+-----------+
|     1 |       57.5000 |      70.5000 |   79.5000 |
|     2 |       73.3333 |      79.0000 |   50.0000 |
+-------+---------------+--------------+-----------+
2 rows in set (0.00 sec)

上記の通り、複数カラムがGROUP BYによって集計されていることがわかります。このように複数カラムをSELECT文で指定すれば、複数カラムを同時に集計することが可能なのです。

まとめ

今回は、SQLのGROUP BYで複数カラムを集計する方法について説明していきました。単一のカラムだけではなく、複数のカラムをグループ化することができるようになったことで、さらにテーブル内データの集計がしやすくなりましたね。ぜひ、テーブル集計の際には、今回学んだことを活用して、わかりやすくテーブルの整理ができるようになりましょう。

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

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

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

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

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

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

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

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

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

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

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