SQLのGROUP BYと言えば、SELECT文とセットで使用することで、指定したカラムの値をもとにグループ化をおこなうことができる命令文でした。
実は、この命令文にCOUNTを組み合わせることによって、重複したレコードの数を数え上げることができます。
今回はSQLのGROUP BYとCOUNTの組み合わせについて、解説とハンズオンでマスターできるようにしていきましょう!
目次
【そもそも】SQLのGROUP BYって何?
そもそもSQLのGROUP BYが何か分からないという方もいらっしゃるかもしれません。
SQLのGROUP BYとは、SELECTステートメントと共に用いることによって、値が等しいレコードごとにグループ化することができるものです。
特にSUM関数とセットで使用されることが多く、複雑な集計なども、このGROUP BYを利用すれば簡単にできてしまうのです。
短期集中でWebエンジニアになれるスクールはこちら
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を使用する準備は完了しました。
短期集中でWebエンジニアになれるスクールはこちら
テーブルの作成
それでは、実際に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。ぜひ、使いこなしてみてください。
SQLを学んでWebエンジニアを目指そう
Webエンジニアは、Webサービスを作るエンジニアで非常に人気の高い職種です。
スタートアップやベンチャー企業が中心なので柔軟性のある雇用形態、魅力的な作業環境、面白いプロジェクト、高い報酬など非常に魅力的な求人が多いです。
Ruby on RailsやGo言語を用いたプロジェクトが多く、SQLも重要なスキルとなります。
このブログを運営するプログラミングスクールのポテパンキャンプでは、実践的なカリキュラムと現役エンジニアからのレビュー、そしてポートフォリオ添削や模擬面談などの面談転職サポートにより、最短距離でWebエンジニアを目指すことができます。
Webエンジニアへの転職を考えている方は、是非一度無料カウンセリングへお申込みください。