Выбор ответа Middle GROUP BY и агрегаты обновлено
Условие без агрегата: WHERE или HAVING
Вопрос
В запросе с GROUP BY city условие city = 'Москва' можно написать и в WHERE, и в HAVING. Что верно?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Результат одинаковый, но в WHERE строки отсеются раньше. HAVING может ссылаться на колонки из GROUP BY, поэтому оба варианта корректны и дают одно и то же.
Варианты ответа
- Результат одинаковый, но в WHERE строки отсеются раньшеправильный ответ
- Только в HAVING, потому что city есть в GROUP BY
- Результат будет разным: HAVING не видит колонку city
- В HAVING можно писать только агрегатные функции
Разбор
HAVING может ссылаться на колонки из GROUP BY, поэтому оба варианта корректны и дают одно и то же. Но WHERE убирает лишние строки ещё до группировки, это естественнее и обычно дешевле (хотя PostgreSQL умеет сам переносить такие условия). Утверждение, что в HAVING допустимы только агрегаты, неверно: допустимы и колонки группировки.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.