SQL 指定した条件にマッチする行のみカウントする
SQLで指定した条件にマッチする行のみカウントする方法を紹介します。
| id | first_name | last_name | age |
|---|---|---|---|
| 1 | 一郎 | 山田 | 20 |
| 2 | 次郎 | 山田 | 30 |
| 3 | 三郎 | 田中 | 40 |
| 4 | 一郎 | 山田 | 20 |
集計関数のCOUNTは、値がNULLのデータはカウントしないため、これを利用します。
SELECT
COUNT(1), --4
COUNT(CASE WHEN age <= 30 THEN 1 ELSE NULL END), --3
FROM
employee重複データは1カウントとしたい場合はSQL 重複した値を除いた件数をカウントするで紹介したように、DISTINCTを使用します。
SELECT
COUNT(1), --4
COUNT(CASE WHEN age <= 30 THEN 1 ELSE NULL END), --3
COUNT(DISTINCT CASE WHEN age <= 30 THEN last_name || first_name ELSE NULL END), --2
FROM
employee条件にマッチする行のみを集計したいときに、WHERE句に条件を指定して、レコード自体を絞り込むこともありますが、1度にいろいろな条件の値を集計したい場合は、集計関数にCASE文を追加して、集計する条件を指定する方法が便利です。