Почему накопительная сумма перескакивает сразу через несколько строк?
Почему накопительная сумма перескакивает сразу через несколько строк? В PostgreSQL 18 SUM с ORDER BY по номеру пакета по умолчанию включает все строки с равным ключом до конца текущей группы. Две операции первого пакета получают один итог. Учебный пример: WITH ops(batch, op_id, amount) AS ( VALUES (1, 101, 10), (1, 102, 20), (2, 103, 5), (3, 104, 7) ) SELECT batch, op_id, amount, SUM(amount) OVER (ORDER BY batch) AS by_batch, SUM(amount) OVER ( ORDER BY batch, op_id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS by_operation FROM ops ORDER BY batch, op_id; Ожидаемый итог по пакету: 30, 30, 35, 42. По операциям: 10, 30, 35, 42. Сначала решите, какой результат нужен. Для последовательного накопления здесь явно заданы рамка ROWS и порядок batch, op_id с уникальным ID. Если оставить только номер пакета, ROWS не определит порядок операций внутри него. Дополнительный уникальный ключ также устраняет равенство ключей: для этой SUM он дал бы последовательный итог и с рамкой по умолчанию. Последний ORDER BY отвечает за показ строк, порядок в OVER — за расчёт. Итог по всему пакету тоже может быть правильным. Сохраните этот набор для проверки отчётов и практики SQL. Он помогает отделить правильный расчёт от правильного понимания задачи. #SQL #PostgreSQL #УЦФОРС