Оконные функции позволяют вычислять агрегаты по группам строк, не схлопывая результат как GROUP BY. Ты получаешь и исходные строки, и агрегированные значения одновременно.
SELECT name, salary,
AVG(salary) OVER (PARTITION BY department) as dept_avg,
ROW_NUMBER() OVER (ORDER BY salary DESC) as rank
FROM employees;
PARTITION BY — по какой группе считать, ORDER BY — в каком порядке. Популярные функции: ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, SUM, AVG. Незаменимы для аналитики: топ-N в каждой группе, накопительные суммы, сравнение с предыдущей строкой. На собесе часто просят написать запрос с ROW_NUMBER для дедупликации.