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

SQL 重複した値を除いた件数をカウントする

SQLで、重複した値を除いた件数を集計する方法を紹介します。

COUNTで集計する際に、重複した値は1カウントとして集計します。

SQL DISTINCTで重複行を1行のみ表示する方法で紹介したように、重複行を除きたいときはDISTINCTを使用します。

employee(社員)
idfirst_namelast_name
1一郎山田
2次郎山田
3三郎田中
4一郎山田

集計関数のCOUNTDISTINCTを指定すると、同じ値が複数ある場合は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

関連記事