MySQLでGROUP BYした結果をCOUNTする方法
GROUP BYは、特定の列に基づいて結果セットをグループ化し、COUNTはこれらのグループ内のレコード数をカウントするのに使用されます。
これにより、特定の値ごとにいくつの行が存在するかを簡単に確認できます。
たとえば、次のようなデータを持つemployeesというテーブルがあるとします。
id | department | name |
---- | ------------ | ------------ |
1 | HR | Alice |
2 | IT | Bob |
3 | HR | Charlie |
4 | IT | David |
5 | IT | Eve |
このテーブルから、department(部門)ごとに従業員の数をカウントしたい場合、GROUP BYとCOUNTを組み合わせたクエリを使用します。
SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department;
- SELECT department, COUNT(*) AS employee_count:department列の値ごとにグループ化し、そのグループ内の行数をカウントします。
COUNT(*)はグループ内の全ての行をカウントします。
AS employee_countは、このカウントの結果に名前を付けている部分で、結果セットにおいてこのカウントを表す列名がemployee_countになります。
- FROM employees:employeesテーブルからデータを取得します。
- GROUP BY department:department列の値ごとに結果セットをグループ化します。
これにより、HRやITのような各部門ごとに1行ずつ結果が得られます。
このクエリを実行すると、以下のような結果が得られます。
department | employee_count |
------------ | ---------------- |
HR | 2 |
IT | 3 |
この結果は、HR部門には2人、IT部門には3人の従業員がいることを示しています。
条件付きカウント
条件付きでグループ化された結果をカウントしたい場合は、CASE文やSUM関数を組み合わせることができます。
たとえば、特定の条件に一致する行だけをカウントする場合、次のようなクエリを使用します。
SELECT department, SUM(CASE WHEN name LIKE 'A%' THEN 1 ELSE 0 END) AS count_a_names FROM employees GROUP BY department;
このクエリは、departmentごとに名前が'A'で始まる従業員の数をカウントします。
CASE文は、nameが'A%'(つまり'A'で始まる)場合に1を返し、それ以外の場合には0を返します。
SUM関数は、この結果を合計して、該当する条件を満たす行の数を求めます。
複数のカウント
複数の条件に基づいてカウントを行いたい場合は、次のように複数のCOUNTまたはSUMを使用できます。
SELECT department, COUNT(*) AS total_employees, SUM(CASE WHEN name LIKE 'A%' THEN 1 ELSE 0 END) AS count_a_names, SUM(CASE WHEN name LIKE 'D%' THEN 1 ELSE 0 END) AS count_d_names FROM employees GROUP BY department;
このクエリは、各部門ごとに総従業員数、名前が'A'で始まる従業員数、'D'で始まる従業員数をそれぞれカウントします。
結果として、複数の条件を一度に評価することができます。
グループ化された結果をさらにフィルタリング
GROUP BYでグループ化された結果をさらに絞り込みたい場合は、HAVING句を使用します。
HAVING句は、GROUP BYで生成された各グループに対して条件を設定するために使用されます。
例えば、従業員数が2人以上の部門だけを表示するには、次のようにします。
SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department HAVING COUNT(*) >= 2;
このクエリでは、HAVING句によって、COUNT(*)が2以上のグループだけが結果として返されます。
結果として、従業員が1人以下の部門は除外されます。
MySQLのGROUP BYとCOUNTの組み合わせは、データ分析をする際に使用することが多いです。
特定の条件に基づいてカウントを行いたい場合や、複数のカウント条件を組み合わせたい場合に柔軟に対応できます。