Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: query, execution, order

В каком порядке выполняются WHERE, GROUP BY, HAVING, ORDER BY?

Вопрос проверяет понимание логического порядка выполнения SQL-запроса и умение корректно писать агрегатные запросы.

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

SQL-запрос выполняется не в том порядке, в котором он написан. Сначала фильтруются строки через WHERE, затем происходит группировка GROUP BY. После этого применяется фильтрация по агрегатам через HAVING. В самом конце результат сортируется с помощью ORDER BY.

Длинный ответ

Чтобы корректно писать сложные SQL-запросы, важно понимать логический порядок их выполнения, а не только синтаксис.

Логический порядок выполнения

Определение:
Логический порядок выполнения — это этапы, через которые проходит запрос внутри СУБД, независимо от порядка ключевых слов в тексте запроса.

Основные этапы:

  1. FROM

    • определяется источник данных

    • формируется набор строк

  2. WHERE

    • фильтрация строк до агрегации

    • агрегатные функции здесь недоступны

  3. GROUP BY

    • строки объединяются в группы

    • подготавливается основа для агрегатных функций

  4. HAVING

    • фильтрация уже сгруппированных данных

    • используется для условий по агрегатам

  5. SELECT

    • вычисляются выражения

    • формируется итоговый набор колонок

  6. ORDER BY

    • сортировка итогового результата

Практический пример

SELECT user_id, COUNT(*)
FROM orders
WHERE status = 'PAID'
GROUP BY user_id
HAVING COUNT(*) > 5
ORDER BY COUNT(*) DESC;

Как читается логически:

  • сначала берутся только оплаченные заказы

  • затем они группируются по пользователю

  • потом отбираются пользователи с более чем 5 заказами

  • в конце результат сортируется

Частая ошибка

  • попытка использовать агрегатные функции в WHERE

  • ожидание, что ORDER BY повлияет на агрегацию

Краткий вывод

WHERE фильтрует строки до группировки, HAVING — после нее, а ORDER BY всегда применяется последним.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Postgres

    Postgres

Ключевые слова

#query

#execution

#order

Подпишись на Java Developer в телеграм