GROUP BY в SQL
Выражение GROUP BY
используется в сочетании с оператором SELECT
и агрегатными функциями для того, чтобы группировать строки по общим значениям столбцов.
Давайте рассмотрим следующие таблицы employees
и departments
.
Таблица employees |
Таблица departments |
+--------+--------------+------------+---------+ | emp_id | emp_name | hire_date | dept_id | +--------+--------------+------------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 4 | | 2 | Tony Montana | 2002-07-15 | 1 | | 3 | Sarah Connor | 2005-10-18 | 5 | | 4 | Rick Deckard | 2007-01-03 | 3 | | 5 | Martin Blank | 2008-06-24 | NULL | +--------+--------------+------------+---------+ |
+---------+------------------+ | dept_id | dept_name | +---------+------------------+ | 1 | Administration | | 2 | Customer Service | | 3 | Finance | | 4 | Human Resources | | 5 | Sales | +---------+------------------+ |
Допустим, вместо того, чтобы найти только имена сотрудников и их отделы, вы хотите узнать общее количество сотрудников в каждом отделе.
В случае небольших таблиц можно применить оператор LEFT JOIN
и подсчитать количество сотрудников. Но если в таблице содержатся записи о тысяче сотрудников, это уже не так просто.
В такой ситуации лучше использовать выражение GROUP BY
— например, так:
SELECT t1.dept_name, count(t2.emp_id) AS total_employees
FROM departments AS t1 LEFT JOIN employees AS t2
ON t1.dept_id = t2.dept_id
GROUP BY t1.dept_name;
При выполнении приведенной выше программы вы получите следующий результат:
+-------------------+-----------------+ | dept_name | total_employees | +-------------------+-----------------+ | Administration | 1 | | Customer Service | 0 | | Finance | 1 | | Human Resources | 1 | | Sales | 1 | +-------------------+-----------------+
В следующей статье вы узнаете, как задать условие поиска для группы или совокупности, используя выражение HAVING
с выражением GROUP BY
.
Примечание. Выражение
GROUP BY
должно располагаться после выраженийFROM
иWHERE
, но передORDER BY
.