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

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

Разбор

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

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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