SQL 重複した値を除いた件数をカウントする
SQLで、重複した値を除いた件数を集計する方法を紹介します。
COUNTで集計する際に、重複した値は1カウントとして集計します。
SQL DISTINCTで重複行を1行のみ表示する方法で紹介したように、重複行を除きたいときはDISTINCTを使用します。
| id | first_name | last_name |
|---|---|---|
| 1 | 一郎 | 山田 |
| 2 | 次郎 | 山田 |
| 3 | 三郎 | 田中 |
| 4 | 一郎 | 山田 |
集計関数のCOUNTにDISTINCTを指定すると、同じ値が複数ある場合は1カウントとして集計します。
SELECT
COUNT(last_name), --4
COUNT(DISTINCT last_name), --2
COUNT(DISTINCT last_name || first_name) --3
FROM
employeelast_nameのみを指定すると、名字だけで重複の判定が行われるため、名前が違っていても名字が同じ場合は1カウントとして集計されます。
重複の判定に複数列を指定したい場合は文字列を結合する必要があります。last_name || first_nameとすれば、同姓同名の値のみが重複として判定されます。
ただし、単純な文字列結合だと、「山 田太郎」のように、名字と名前それぞれでは異なる値だが、結合すると同じになる場合に対応できません。
その場合は以下のように区切り文字を指定して対処する必要があります。
SELECT
COUNT(DISTINCT last_name || '_' || first_name)
FROM
employee