Расчет промежуточных итогов по строкам и группировка по ID - PullRequest
0 голосов
/ 13 июня 2019

Я хочу вычислить итоговые итоги по всей таблице, однако для новых идентификаторов итоги должны начинаться заново

https://imgur.com/a/YgQmYQA

Мой код:

set @csum := 0;
select ID, name, marks, (@rt := @rt + marks) as Running_total from students order by ID;

Выходные данные возвращают итоги, но не ломаются и не начинаются заново для новых идентификаторов

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

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

Подход 1 : его можно записать в виде простого запроса, если ваша СУБД поддерживает аналитические функции

SELECT     ID
           ,name
           ,marks
           ,Running_total = SUM(marks) OVER (PARTITION BY ID ORDER BY marks ASC)
FROM       students

Подход 2 : Вы можете использовать OUTER APPLY, если ваша версия базы данных / сама СУБД не поддерживает аналитические функции

SELECT     S.ID
           ,S.name
           ,S.marks
           ,Running_total = OA.runningtotalmarks 
FROM       students S
           OUTER APPLY (
                           SELECT   runningtotalmarks = SUM(SI.marks)
                           FROM     students SI
                           WHERE    SI.ID = S.ID
                           AND      SI.marks <= S.marks
                       ) OA;

Примечание: - Вышеуказанные запросы были проверены MS SQL Server.

0 голосов
/ 13 июня 2019

Бро, попробуй это ... Тестируется на MSSQL ..

select ID, name, marks, 
    marks + isnull(SUM(marks) OVER (  PARTITION BY ID   ORDER BY  ID  ROWS BETWEEN UNBOUNDED PRECEDING  AND  1  PRECEDING) ,0) as Running_total
from students 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...