Запрос: SELECT dept, SUM(salary), RANK() OVER(ORDER BY SUM(salary) DESC) FROM employees GROUP BY dept. Когда сработает оконная функция RANK()?

AОконная функция применится к исходным строкам до группировки и увидит все строки таблицы
BОконная функция вычисляется после GROUP BY и видит по одной агрегированной строке на каждую группу
CЗапрос завершится ошибкой, потому что оконные функции несовместимы с GROUP BY в одном запросе
DОконная функция и GROUP BY выполнятся параллельно, и результаты будут объединены в финальном выводе
Правильный ответ. Оконные функции вычисляются после GROUP BY и HAVINGRANK() видит уже сгруппированные строки.

Разбор

Логический порядок выполнения SQL: FROMWHEREGROUP BYHAVING → оконные функции → SELECTORDER BY. Поэтому RANK() OVER(ORDER BY SUM(salary) DESC) получает на вход результат группировки — по одной строке на отдел с вычисленной суммой — и ранжирует эти агрегированные строки. Оконная функция не может «заглянуть» в исходные строки внутри группы.

Проверь себя · 1/3разбор после ответа
Есть таблица payments(amount), в части строк amount равно NULL. Какой запрос посчитает количество всех строк в таблице, включая строки с NULL в столбце amount?
Тренировать SQL в Telegram

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