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を使って重複を除いてデータを取得する方法を書きました。
記事の内容をまとめると、下記のようになります。
・複数のカラムに対して、DISTINCTを使うと、指定した全てのカラムのデータが同じ場合にデータが省かれた。
・COUNT関数に、DISTINCTをつけてカウントしたいカラムを指定することで、重複を排除してカウントできた。
コメント