Запрос: SELECT dept, SUM(cost) FROM expenses GROUP BY dept HAVING SUM(cost) > (SELECT AVG(limit) FROM budgets). Что он вернёт?

AОтделы, суммарные расходы которых превышают среднее значение по таблице нормативов
BОтделы, суммарные расходы которых превышают максимальное значение по таблице нормативов
CВсе отделы с их расходами, отсортированные по убыванию суммы
DОтделы, в которых хотя бы одна статья расходов превышает средний норматив
Правильный ответ. Подзапрос в HAVING вычисляет средний норматив по таблице budgets, а HAVING оставляет только те отделы, чья суммарная стоимость превышает это значение.

Разбор

В HAVING допустимы скалярные подзапросы (возвращают одно значение). Здесь SELECT AVG(limit) FROM budgets выполняется один раз и возвращает одно число. Внешний запрос группирует по dept и оставляет группы, где SUM(cost) превышает этот порог. Это стандартный способ сравнить группу с внешним агрегатом.

Проверь себя · 1/3разбор после ответа
Как GROUP BY обрабатывает значения NULL в столбце группировки?
Тренировать SQL в Telegram

Ещё вопросы по теме «Агрегация, GROUP BY и HAVING»