Порядок выполнения запроса в SQL

СУБД выполняет запрос не в том порядке, в каком мы его пишем.

На днях споткнулся на том, что оконка считала сумму по-разному с HAVING и без него. Был уверен, что WINDOW функции отрабатывают до HAVING, а оказалось, что нет...

Сделал небольшую шпаргалку-напоминалку:

1. FROM & JOIN — берем данные ИЗ... 2. WHERE — ГДЕ (фильтруем строки)... 3. GROUP BY — ГРУППИРУЕМ ПО... 4. Агрегатные функции (SUM, MAX и т.д.) — считаем значения внутри групп 5. HAVING — фильтруем сгруппированные данные 6. Window Functions (SUM(...) OVER(...)) — считаем по имеющемуся набору данных 7. SELECT — выбираем столбцы и присваиваем алиасы. 8. ORDER BY — СОРТИРУЕМ финальный результат.

Кстати, поэтому алиасы из SELECT нельзя использовать в WHERE или GROUP BY. На тех этапах база их еще просто «не видит». Единственное место, где они работают — это финальный ORDER BY.

Связи: 📌 Сначала понять ЧТО, потом КАК, потом делать


В этом посте были ссылки, но мы их удалили по правилам Сетки

Порядок выполнения запроса в SQL
СУБД выполняет запрос не в том порядке, в каком мы его пишем.
На днях споткнулся на том, что оконка считала сумму по-разному с HAVING и без него | Сетка — социальная сеть от hh.ru