Объяснение
GROUP BY объединяет строки в группы, HAVING фильтрует агрегаты. Window function считает по окну, сохраняя отдельные строки. Порядок внутри окна определяет running total и ранги.
Задача для самостоятельного решения
Чем SUM(amount) OVER() отличается от обычной SUM(amount)?
Показать разбор ответа
Оконная сумма повторяется в каждой строке исходного набора; обычная агрегатная сумма без GROUP BY возвращает одну строку.