Зачем во втором SQL-запросе выполнять `GROUP BY D.Id, D.Name`? Что изменится, если убрать `D.Id` из группировки?

Группировка по D.Id и D.Name различает сущности с одинаковыми именами. Если оставить только имя, их строки и агрегаты могут объединиться; если Id остаётся в SELECT, запрос также может стать недопустимым.

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

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

Группировка по D.Id и D.Name различает сущности с одинаковыми именами. Если оставить только имя, их строки и агрегаты могут объединиться; если Id остаётся в SELECT, запрос также может стать недопустимым.

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

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

Группировка по D.Id и D.Name различает сущности с одинаковыми именами. Если оставить только имя, их строки и агрегаты могут объединиться; если Id остаётся в SELECT, запрос также может стать недопустимым.

Например, два подразделения «Продажи» с разными ID должны иметь отдельные суммы. GROUP BY Name объединит их в одну группу, а GROUP BY Id, Name сохранит различие.

Некоторые СУБД умеют выводить функциональную зависимость имени от первичного ключа и допускают группировку только по Id. Обратная зависимость обычно не гарантирована. Полный второй запрос и схема в условии не приведены, поэтому точный результат зависит от SELECT, ограничений уникальности и используемой СУБД.

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

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

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

Подробнее