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
文を追加して、集計する条件を指定する方法が便利です。