English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве вы узнаете, как группировать строки по значениям столбцов.
подзапрос GROUP BY вSELECTзапрос иагрегирующие функциивместе с использованием, чтобы объединить строки по общим значениям столбцов
Чтобы лучше понять это, давайте посмотрим на следующий пример: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 | +---------+------------------+ | |
Таблица: employees | Таблица: departments |
Теперь не только нужно найти сотрудников и названия их отделов, но и количество сотрудников в каждом отделе.
Для небольших таблиц можно просто применитьЛевое соединениеИ вычислить количество сотрудников, но предположим, что если таблица содержит тысячи сотрудников, это не будет так легко.
В этом случае можно использовать предложение GROUP BY вместе с запросом SELECT, как показано ниже:
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 | | Обслуживание клиентов | 0 | | Финансы | 1 | | Ресурсы人事а | 1 | | Продажи | 1 | +-------------------+-----------------+
В следующей главе вы узнаете, как использовать подзапрос HAVING и GROUP BY для указания условия поиска для группы или агрегации.