Запрос: 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 в столбце группировки?Ещё вопросы по теме «Агрегация, GROUP BY и HAVING»
- Что делает оператор `DISTINCT`?
- Что делает `HAVING`?
- Есть таблица `orders(user_id, amount)`. Какой запрос посчитает сумму всех заказов по каждому пользователю?
- Нужно посчитать сумму оплаченных заказов по каждому пользователю. В таблице `orders` есть поля `user_id`, `amount`, `status`. Какой запрос корректен и наиболее эффективен?
- В таблице `users` есть колонка `middle_name`, в которой часто хранится `NULL`. Что вернёт выражение `COUNT(middle_name)`?
- Все вопросы по «Агрегация, GROUP BY и HAVING» →