Иногда при расчётах нужно не учитывать текущую строку или соседние — например, чтобы не искажать среднее значение. Для этого в SQL есть оператор
EXCLUDE - задаёт, какие строки исключать из окна.Сначала исключим текущую строку:
SELECT id, value,
AVG(value) OVER (
ORDER BY id
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
EXCLUDE CURRENT ROW
) AS avg_without_current
FROM data;
Исключаем все строки с одинаковым значением сортировки:
SELECT id, category, value,
SUM(value) OVER (
ORDER BY category
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
EXCLUDE GROUP
) AS sum_without_group
FROM data;
Исключаем только строки с тем же значением
ORDER BY (ties):SELECT id, score,
COUNT(*) OVER (
ORDER BY score
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
EXCLUDE TIES
) AS cnt_without_ties
FROM data;
🔥 Так
EXCLUDE помогает гибко управлять рамкой окна — исключая нужные строки из расчётов без изменения общей логики запроса.➡️ SQL Ready | #практика