zukucode
主にWEB関連の情報を技術メモとして発信しています。

SQL DISTINCTで複数列を指定してカウントするときの注意点

SQL 重複した値を除いた件数をカウントするで、重複したデータを1件として集計する方法を紹介しましたが、重複の判定に複数の列をしている場合は注意が必要です。

複数の列で重複の判定を行うときは、以下のように対象の列を文字列結合することが多いです。

employee(社員)
idfirst_namelast_name
1一郎山田
2次郎山田
3三郎田中
4一郎山田
SELECT
  COUNT(DISTINCT last_name || first_name) --3
FROM
  employee

上記のSQLだと、以下のデータも「山田一郎」の重複データとして扱われてしまいます。

employee(社員)
idfirst_namelast_name
1一郎山田
2次郎山田
3三郎田中
4一郎山田
5田一郎
SELECT
  COUNT(DISTINCT last_name || first_name) --3
FROM
  employee

単独のカラムでは値がことなるのに、文字列結合した場合は値が同じになるケースを考慮する必要があります。

以下のように区切り文字を指定して対処する必要があります。

SELECT
  COUNT(DISTINCT last_name || '_' || first_name)
FROM
  employee

関連記事