Фактически мы познакомились с этими функциями, когда рассматривали
функции ранжирования. Только сейчас мы будем использовать агрегатные функции
вместо функций, которые задают номер/ранг строки. Есть еще одно отличие (в
реализации Майкрософт SQL Server 2005/2008) – предложение OVER() не содержит
дополнительного предложения ORDER BY, поскольку значение агрегата не зависит от
сортировки строк в «окне».
Как и ранее, предложение PARTITION BY
определяет «окно», т.е. набор строк, характеризуемых равенством значений списка
выражений, указанного в этом предложении. Если предложение PARTITION BY
отсутствует, то агрегатные функции применяются ко всему результирующему набору
строк запроса. В отличие от классической группировки, где мы получаем
на каждую группу одну строку, которая может содержать агрегатные значения,
подсчитанные для каждой такой группы, здесь мы можем добавить агрегат к
детализированным (несгруппированным) строкам. Рассмотрим несколько примеров
использования оконных функций.