バナー画像

SQLのGROUP BYと言えば、SELECT文とセットで使用することで、指定したカラムの値をもとにグループ化をおこなうことができる命令文でした。

実は、この命令文にCOUNTを組み合わせることによって、重複したレコードの数を数え上げることができます。

今回はSQLのGROUP BYとCOUNTの組み合わせについて、解説とハンズオンでマスターできるようにしていきましょう!

【そもそも】SQLのGROUP BYって何?

そもそもSQLのGROUP BYが何か分からないという方もいらっしゃるかもしれません。

SQLのGROUP BYとは、SELECTステートメントと共に用いることによって、値が等しいレコードごとにグループ化することができるものです。

特にSUM関数とセットで使用されることが多く、複雑な集計なども、このGROUP BYを利用すれば簡単にできてしまうのです。

SQLのGROUP BYとCOUNTを組み合わせる

SQLのGROUP BYについて簡単に説明したところで、いよいよGROUP BYとCOUNTの組み合わせ方について見ていきましょう。

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

mysql> SELECT * FROM staffs;
+--------+------+
| gender | age  |
+--------+------+
|      1 |   32 |
|      2 |   43 |
|      1 |   25 |
|      1 |   52 |
|      2 |   33 |
|      2 |   41 |
|      1 |   24 |
+--------+------+
7 rows in set (0.00 sec)

上記は従業員の性別・年齢を管理しているテーブルです。「gender」カラムは男性が「1」、女性が「2」という形で性別が管理されています。

また「age」カラムは年齢が管理されています。上記では「男性が何人いるのか、女性が何人いるのか」ということが一見して分かりづらいです。

このようなときに「男性が○人」「女性が○人」と分かりやすく整理できるのが、GROUP BYとCOUNTの組み合わせです。

以下のようなステートメントをSQLに出しましょう。

mysql> SELECT gender, COUNT(gender) FROM staffs GROUP BY gender;

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

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

このように「gender」の値ごとに集計がなされ、「1」が4レコード、「2」が3レコードあるということがわかりました。

SQLのGROUP BYとCOUNTを組み合わせるハンズオン!

それでは上記で解説してきたGROUP BYとCOUNTを組み合わせるハンズオンを実際に手を動かしながら体験してみましょう。

ちなみに今回は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 students (club varchar(50), gender int, address VARCHAR(50));
Query OK, 0 rows affected (0.01 sec)

上記のSQLステートメントによって、クラブ名・性別・住所を管理できるテーブルが作成されました。以下がテーブルの全体像です。

mysql> DESC students;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| club    | varchar(50) | YES  |     | NULL    |       |
| gender  | int(11)     | YES  |     | NULL    |       |
| address | varchar(50) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

レコードの挿入

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

mysql> INSERT INTO students VALUES("baseball", 1, "Kyoto");
mysql> INSERT INTO students VALUES("Kendo", 2, "Fukuoka");
mysql> INSERT INTO students VALUES("Swimming", 2, "Tokyo");
mysql> INSERT INTO students VALUES("Judo", 1, "Kyoto");
mysql> INSERT INTO students VALUES("Sado", 1, "Osaka");
mysql> INSERT INTO students VALUES("baseball", 2, "Tokyo");

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

mysql> SELECT * FROM students;
+----------+--------+---------+
| club     | gender | address |
+----------+--------+---------+
| baseball |      1 | Kyoto   |
| Kendo    |      2 | Fukuoka |
| Swimming |      2 | Tokyo   |
| Judo     |      1 | Kyoto   |
| Sado     |      1 | Osaka   |
| baseball |      2 | Tokyo   |
+----------+--------+---------+
6 rows in set (0.00 sec)

SQL GROUP BYとCOUNTの組み合わせに挑戦

早速、GROUP BYとCOUNTの組み合わせにトライしてみましょう。まずは、部活動ごとの人数集計をしていきます。

以下のようにSQLステートメントを入力してみましょう。

mysql> SELECT club, count(club) FROM students GROUP BY club;

上記のSQLステートメントの結果、以下のように出力されました。

+----------+-------------+
| club     | count(club) |
+----------+-------------+
| baseball |           2 |
| Kendo    |           1 |
| Swimming |           1 |
| Judo     |           1 |
| Sado     |           1 |
+----------+-------------+
5 rows in set (0.00 sec)

それでは次にaddress(住所)ごとに集計をします。ここまでの解説をもとに、まずは自分でSQLステートメントを考えてみましょう。

さて、以下がaddress(住所)ごとに集計する際のSQLステートメントの一例です。

mysql> SELECT address, count(address) FROM students GROUP BY address;

上記のSQLステートメントの結果、以下のように出力されました。

+---------+----------------+
| address | count(address) |
+---------+----------------+
| Kyoto   |              2 |
| Fukuoka |              1 |
| Tokyo   |              2 |
| Osaka   |              1 |
+---------+----------------+
4 rows in set (0.00 sec)

このようにGROUP BYとCOUNTを組み合わせることで、簡単に集計ができるということを覚えておきましょう。

まとめ

今回はSQLのGROUP BYとCOUNTの組み合わせについてマスターできるように解説とハンズオンを勧めてきました。テーブル内データの種類を集計したいときに便利なGROUP BYとCOUNT。ぜひ、使いこなしてみてください。

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

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

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

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

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

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

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

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

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

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

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