Запрос: 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 и HAVING — RANK() видит уже сгруппированные строки.

Разбор

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

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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