MySQLでDISTINCTを使って重複を除去してデータ取得する!

MySQL MySQL

MySQLでデータ取得時にDISTINCTを使って、重複データを除去する方法について書きました。
SELECTと一緒にDISTINCTを使うことで、重複データを除いてデータを取得することができます。

MySQLのバージョン8.0.32で、動作を検証しています。

DISTINCTを使ってデータを取得する

SELECTと一緒にDISTINCTを使うことができます。
usersというテーブルに、下記のようにデータが入っています。

id name age birthday
1 jiro 23 2000-01-01
2 taro 25 1998-01-01
3 hanako 26 1997-01-01
4 jiro 32 1991-01-01
5 taro 30 1993-01-01
6 taro 28 1995-01-01

taroさんが3人、jiroさんが2人いますね。
同じ名前の人をひとつにまとめて表示してみます。

例えば、下記のように実行します。

SELECT DISTINCT name FROM users;

DISTINCTの後に、重複を排除したいカラムを指定します。
実行すると、結果は下記のようになりました。

mysql> SELECT DISTINCT name FROM users;
+--------+
| name   |
+--------+
| jiro   |
| taro   |
| hanako |
+--------+
3 rows in set (0.00 sec)

jiroさんと、taroさんの名前はひとつにまとめられて、3人の名前が返ってきました。
このようにDISTINCTを使うと、指定したカラムの重複を排除して、データを返してくれます。

複数のカラムを指定してDISTINCTする

複数のカラムを指定した時には、どちらのカラムの値も同じとき(同じ行を返す)に、重複を排除してくれます。
fruitsというテーブルに、下記のようにデータが入っています。

name price
banana 150
grape 250
apple 120
apple 100
banana 150
grape 250

名前(name)と値段(price)を指定したときに、重複するデータは「banana・150」と「grape・250」です。
この時に、下記のようにの2つのカラムを取得するときにDISTINCTを使います。

SELECT DISTINCT name, price FROM fruits;

そうすると、このように重複するデータは省かれて表示されました。

mysql> SELECT DISTINCT name, price FROM fruits;
+--------+-------+
| name   | price |
+--------+-------+
| banana |   150 |
| grape  |   250 |
| apple  |   120 |
| apple  |   100 |
+--------+-------+
4 rows in set (0.00 sec)

このように、カラムを複数指定した時には、どのカラムの値も同じ行のデータが省かれて表示されます。

DISTINCTとCOUNTで重複しないデータ個数がわかる

DISTINCTを使ってデータを取得したときに、COUNT関数を使うことで、重複しないデータの個数がわかります。
先ほどのfruitsテーブルの果物の種類がいくつ入っているか確認してみます。

データが下記のように入っています。

name price
banana 150
grape 250
apple 120
apple 100
banana 150
grape 250

この時に名前(name)を取得時にDISTINCTしてCOUNT関数を使うことで、重複しないカラム数を取得できます。
下記のように、COUNT関数に重複を排除して、カウントしたいカラムを指定します。

SELECT COUNT(DISTINCT name) FROM fruits;

そうすると、下記のように重複を除いた個数を確認できました。

mysql> SELECT COUNT(DISTINCT name) FROM fruits;
+----------------------+
| COUNT(DISTINCT name) |
+----------------------+
|                    3 |
+----------------------+
1 row in set (0.00 sec)

MySQLでDISTINCTを使う方法のまとめ

今回はMySQLでDISTINCTを使って重複を除いてデータを取得する方法を書きました。
記事の内容をまとめると、下記のようになります。

・SELECTを使うときにDISTINCTをカラムに指定することで、重複を省くことができた。
・複数のカラムに対して、DISTINCTを使うと、指定した全てのカラムのデータが同じ場合にデータが省かれた。
・COUNT関数に、DISTINCTをつけてカウントしたいカラムを指定することで、重複を排除してカウントできた。

コメント

タイトルとURLをコピーしました