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
employee
last_name
のみを指定すると、名字だけで重複の判定が行われるため、名前が違っていても名字が同じ場合は1カウントとして集計されます。
重複の判定に複数列を指定したい場合は文字列を結合する必要があります。last_name || first_name
とすれば、同姓同名の値のみが重複として判定されます。
ただし、単純な文字列結合だと、「山 田太郎」のように、名字と名前それぞれでは異なる値だが、結合すると同じになる場合に対応できません。
その場合は以下のように区切り文字を指定して対処する必要があります。
SELECT
COUNT(DISTINCT last_name || '_' || first_name)
FROM
employee