支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


◎【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    田中 太郎             /  
 
今度は重複したデータを除外してこのテーブルから name カラムと color カラムの値を取得してみます。取得するデータは name カラムの値を記述に並べ替えをしてみます。    

◎【MySQL】DISTINCTに設定するカラムの値が複数ある場合のサンプルコード


userテーブルの値
--------------------------------------------------
 id     name      from
--------------------------------------------------
 01    田中 太郎   東京
 02    鈴木 花子   沖縄
 03    小林 次郎   京都
 04    鈴木 花子   大阪
 05    田中 太郎   東京  

重複したデータを除外してuserテーブルから「nameカラム」と「fromカラム」の値を取得し、取得したデータはnameカラムの値で並べ替え行います。

1. SELECT DISTINCT name, from from user order by name;  
   

◎実行結果

----------------------------------
 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

【MySQL】列が複数の場合のレコード件数取得方法

SELECTを行う列が複数の場合は、列と列が1つになるようにまとめた上で、DISTINCTを使用し重複を除きます。 列と列をまとめるためにはCONCAT関数を併用して、以下の構文の通り記述致します。

・列をまとめた結果を表示する為のCONCAT関数を使用しなかった場合

1. SELECT
2. DISTINCT CONCAT(id, name) result
3. 
4. FROM
5.  user;  
   

◎実行結果

---------------------------------------------
   result
---------------------------------------------
 01田中 太郎
 02鈴木 花子
 03小林 次郎
 04鈴木 花子
 05田中 太郎  

件数を数える為、CONCAT関数を使用した場合
1. SELECT COUNT(
2. DISTINCT CONCAT(id, name)
3. )result
4. FROM
5.  user;  
   

◎実行結果

-----------------------------
   result
-----------------------------
    5

◎【MySQL】DISTINCTまとめ

   

いかがでしたでしょうか。「DISTINCT」関数は見やすく綺麗にデータ抽出するには大変便利な関数になります。 「DISTINCT」は、SELECT文の実行結果の重複データを1つにまとめることができ、 SELECT文を使用しデータを取得する際は、取得するカラムの値が一致しているデータは除外してデータを取得することができます。 使用用途、方法もたくさんあるので使いこなせるようになれば大変便利です。 SQLをさわる方はぜひ覚えてみてはいかがでしょうか。