Найти в Дзене

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

Порядок выполнения запроса в 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 и без него. Был уверен, что 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.

Связи:

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