SQL: Join
Теория: INNER JOIN и GROUP BY
В этом уроке мы научимся использовать INNER JOIN вместе с GROUP BY. Запросы, в которых одновременно используются и соединение, и группировка, часто используются для составления сводных отчетов.
Используем INNER JOIN вместе с GROUP BY
Рассмотрим пример с сотрудниками и отделами, в которых они работают:
Таблица departments хранит информацию об отделах компании:
departments
Таблица employees хранит информацию о сотрудниках: имя, отдел и зарплата:
employees
Допустим, мы хотим построить отчет, в котором будет указано название отдела, количество сотрудников в нем и суммарная зарплата всех сотрудников отдела.
Такую задачу легко решить с помощью соединения и группировки:
Результат выполнения запроса:
Логически СУБД выполняет запрос следующим образом:
- Выполняется соединение двух таблиц по условию:
dep.department_id = emp.department_id. - Полученные строки разделяются на группы с одинаковым названием отдела —
dep.name. - Для каждой группы рассчитываются количество сотрудников в группе —
COUNT(emp.employee_id)и суммарная зарплата —SUM(emp.salary).
В курсе по основам SQL мы разбирали, что GROUP BY накладывает ограничения на столбцы, которые перечислены в секции SELECT:
- Либо столбец находится внутри агрегатной функции, например,
SUM(),COUNT(),MIN(),MAX()и так далее - Либо он используется для группировки, то есть указан в секции
GROUP BY
Выводы
В этом уроке мы узнали, как пользоваться INNER JOIN и GROUP BY в одном запросе. В простом запросе группировка ограничена значениями одной таблицы, но соединение таблиц позволяет преодолеть это ограничение.
.png)














