SQL DISTINCTで複数列を指定してカウントするときの注意点
SQL 重複した値を除いた件数をカウントするで、重複したデータを1件として集計する方法を紹介しましたが、重複の判定に複数の列をしている場合は注意が必要です。
複数の列で重複の判定を行うときは、以下のように対象の列を文字列結合することが多いです。
id | first_name | last_name |
---|---|---|
1 | 一郎 | 山田 |
2 | 次郎 | 山田 |
3 | 三郎 | 田中 |
4 | 一郎 | 山田 |
SELECT
COUNT(DISTINCT last_name || first_name) --3
FROM
employee
上記のSQL
だと、以下のデータも「山田一郎」の重複データとして扱われてしまいます。
id | first_name | last_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