OVER, PARTITION BY и WINDOW

    Механизм оконных функций, появившийся в стандарте SQL:2003 и расширенный в стандарте SQL:2011, позволяет выполнять вычисления над набором строк таблицы, который некоторым образом соотносится с текущей строкой.

    PARTITION BY разбивает таблицу на партиции по значению переданного следом выражения, по умолчанию вся таблица считается одной партицией. Строки внутри партиции могут быть дополнительно отсортированы с помощью ORDER BY.

    Предупреждение

    По стандарту в рамках партиции должна быть возможность определить набор строк, над которыми будут выполняться оконные функции (положение окна), но на данный момент доступно только положение по умолчанию: от начала партиции и до текущей строки включительно.

    На данный момент все настройки окна указываются с помощью ключевого слова WINDOW, создающего именованное окно (анонимные окна пока не поддержаны). Для вызова функций на окне используется ключевое слово OVER.

    В отличие от GROUP BY, группировки по ключам партиционирования не происходит. Таким образом, при вызове оконных функций остается полноценный доступ к текущей строке.

    Список доступных оконных функций приведен в разделе Встроенные функции.

    Примеры

    SELECT
        COUNT(*) OVER w AS rows_count_in_window,
        some_other_value -- доступ к текущей строке
    FROM my_table
    WINDOW w AS (
        PARTITION BY partition_key_column
        ORDER BY int_column
    );
    
    SELECT
        LAG(my_column, 2) OVER w AS row_before_previous_one
    FROM my_table
    WINDOW w AS (
        PARTITION BY partition_key_column
    );