JOIN и GROUP BY: зарплаты сотрудников по отделам

В SQL запросе с использованием JOIN и GROUP BY важно правильно группировать данные.

Короткий ответ

Что ответить на собеседовании

В SQL запросе с использованием JOIN и GROUP BY важно правильно группировать данные.

Подробный разбор

Ответ с пояснениями

Условие

-- Есть таблицы со структурой Employee id (PK) name salary dep_id(FK department.id)

Department id (PK) name -- написать запрос, который вернет список наименований всех отделов с максимальной зарплатой в каждом отделе

SELECT d.name, MAX(e.salary) AS max_salary FROM Department d JOIN Employee e ON e.dep_id = d.id GROUP BY d.id

Employee id | name | salary | dep_id 1 | Иванов | 90 | 1 2 | Петров | 150 | 2 3 | Сидоров| 110 | 1 4 | Кузнецов| 150 | 2 5 | Соколов| 80 | 2

Department id | name 1 | АХО 2 | IT 3 | Бухгалтерия

Ответ

В SQL запросе с использованием JOIN и GROUP BY важно правильно группировать данные.

В этом случае:

SELECT f.name, count(*)
FROM faculty f
JOIN student s ON s.faculty_id = f.id
GROUP BY f.id, f.name

группировка по f.id, f.name корректна, так как f.id — первичный ключ, а f.name — атрибут, связанный с ним.

Если попытаться группировать только по f.name, то возможна ошибка или некорректный результат, если имена факультетов не уникальны.

Группировка только по f.id тоже корректна, так как id уникален, и можно выбрать f.name без группировки, если СУБД это позволяет.

Итог: для правильного подсчёта студентов на факультет лучше группировать по f.id (уникальному идентификатору).

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее