SQL

Оконные функции: рейтинг и нарастающий итог

Algonexys · 07.08.2026 · 👁 1

ROW_NUMBER, RANK, LAG и running total — стандарт SQL, работает в PostgreSQL, MySQL 8+, SQL Server.

Код

-- Топ-3 самых дорогих заказа в каждой категории
SELECT *
FROM (
    SELECT
        o.id,
        o.category,
        o.total,
        ROW_NUMBER() OVER (PARTITION BY o.category ORDER BY o.total DESC) AS rn,
        RANK()       OVER (PARTITION BY o.category ORDER BY o.total DESC) AS rank_in_cat
    FROM orders o
) t
WHERE t.rn <= 3;

-- Нарастающий итог и сравнение с предыдущим днём
SELECT
    day,
    revenue,
    SUM(revenue) OVER (ORDER BY day)                       AS running_total,
    LAG(revenue) OVER (ORDER BY day)                       AS prev_day,
    revenue - LAG(revenue) OVER (ORDER BY day)             AS delta,
    AVG(revenue) OVER (ORDER BY day
                       ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS ma_7d
FROM daily_revenue
ORDER BY day;