【MySQL】DISTINCT
◎【MySQL】DISTINCTとはなにか
【MySQL】の「DISTINCT」は、SELECT文の実行結果の重複データを1つにまとめる構文です。 SELECT文を使用しデータを取得するときに、 DISTINCT を指定すると取得するカラムの値が一致しているデータは除外してデータを取得することができます。
◎【MySQL】DISTINCTの基本構文
1. SELECT DISTINCT カラム名1,カラム名2... FROM テーブル名
以下のuserテーブルに「id、name」のカラムがあり、同姓同名が複数行ある場合、DISTINCTを使用すると次のように1レコードになります。
◎DISTINCTのサンプルコード
1. SELECT DISTINCT name from user;
◎userテーブルと【MySQL】DISTINCTのサンプルコード実行後の表示結果
---------------------------------- --------------------
id name name
---------------------------------- \ --------------------
01 田中 太郎 ----- \ 田中 太郎
02 鈴木 花子 \ 鈴木 花子
03 小林 次郎 / 小林 次郎
04 鈴木 花子 ----- /
05 田中 太郎 /
id name name
---------------------------------- \ --------------------
01 田中 太郎 ----- \ 田中 太郎
02 鈴木 花子 \ 鈴木 花子
03 小林 次郎 / 小林 次郎
04 鈴木 花子 ----- /
05 田中 太郎 /
今度は重複したデータを除外してこのテーブルから name カラムと color カラムの値を取得してみます。取得するデータは name カラムの値を記述に並べ替えをしてみます。
◎【MySQL】DISTINCTに設定するカラムの値が複数ある場合のサンプルコード
userテーブルの値
--------------------------------------------------
id name from
--------------------------------------------------
01 田中 太郎 東京
02 鈴木 花子 沖縄
03 小林 次郎 京都
04 鈴木 花子 大阪
05 田中 太郎 東京
id name from
--------------------------------------------------
01 田中 太郎 東京
02 鈴木 花子 沖縄
03 小林 次郎 京都
04 鈴木 花子 大阪
05 田中 太郎 東京
重複したデータを除外してuserテーブルから「nameカラム」と「fromカラム」の値を取得し、取得したデータはnameカラムの値で並べ替え行います。
1. SELECT DISTINCT name, from from user order by name;
◎実行結果
----------------------------------
name from
----------------------------------
鈴木 花子 沖縄
鈴木 花子 大阪
小林 次郎 京都
name from
----------------------------------
鈴木 花子 沖縄
鈴木 花子 大阪
小林 次郎 京都
◎【MySQL】「DISTINCT」と「COUNT」の併用
「DISTINCT」を使用し、検索したレコード件数を調べるには、件数を数える「COUNT」を併用します。 「COUNT」の基本構文は以下の通りです。
1. SELECT COUNT(カラム名) FROM テーブル名
列が1つの場合のレコード件数取得方法
以下のサンプルコードはuserテーブルの「name」をDISTINCTで重複を1つにまとめたのち、レコードの件数を数えるサンプルコードです。
1. SELECT COUNT(DISTINCT name) from user;
◎実行結果
-------------------------------------
COUNT(DISTINCT name)
-------------------------------------
3
COUNT(DISTINCT name)
-------------------------------------
3
【MySQL】列が複数の場合のレコード件数取得方法
SELECTを行う列が複数の場合は、列と列が1つになるようにまとめた上で、DISTINCTを使用し重複を除きます。 列と列をまとめるためにはCONCAT関数を併用して、以下の構文の通り記述致します。
・列をまとめた結果を表示する為のCONCAT関数を使用しなかった場合
1. SELECT
2. DISTINCT CONCAT(id, name) result
3.
4. FROM
5. user;
2. DISTINCT CONCAT(id, name) result
3.
4. FROM
5. user;
◎実行結果
---------------------------------------------
result
---------------------------------------------
01田中 太郎
02鈴木 花子
03小林 次郎
04鈴木 花子
05田中 太郎
result
---------------------------------------------
01田中 太郎
02鈴木 花子
03小林 次郎
04鈴木 花子
05田中 太郎
件数を数える為、CONCAT関数を使用した場合
1. SELECT COUNT(
2. DISTINCT CONCAT(id, name)
3. )result
4. FROM
5. user;
2. DISTINCT CONCAT(id, name)
3. )result
4. FROM
5. user;
◎実行結果
-----------------------------
result
-----------------------------
5
result
-----------------------------
5
◎【MySQL】DISTINCTまとめ
いかがでしたでしょうか。「DISTINCT」関数は見やすく綺麗にデータ抽出するには大変便利な関数になります。 「DISTINCT」は、SELECT文の実行結果の重複データを1つにまとめることができ、 SELECT文を使用しデータを取得する際は、取得するカラムの値が一致しているデータは除外してデータを取得することができます。 使用用途、方法もたくさんあるので使いこなせるようになれば大変便利です。 SQLをさわる方はぜひ覚えてみてはいかがでしょうか。
関連記事一覧