Как сложить значение строки в строку в MySQL? - PullRequest
2 голосов
/ 21 марта 2019

Допустим, у меня есть данные в MySQL, как это:

date | value
2010 | 1
2011 | 4
2012 | 2
2013 | 3

Я хочу получить такой результат:

date | value
2010 | 1
2011 | 5
2012 | 7
2013 | 10

Я думал, что это будет просто. Я пытаюсь это:

select tabelA.date, sum(value)
from tabelA
inner join (select date from tabelA group by date) b on tabelA.date > b.date
group by tabelA.date

Я чувствую, что упускаю что-то очевидное. Это кажется простым делом, которое хочется сделать.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 21 марта 2019

Лучший подход в MySQL 8+ - это оконные функции:

select a.date,
       sum(a.value) over (order by a.date)
from tabelA a
order by a.date;

В старых версиях переменные, вероятно, являются лучшим подходом, но их нужно использовать осторожно:

select date, (@csum := @csum + value) as running_sum
from (select a.date, a.value as value
      from tableA a
      order by a.date
     ) a cross join
     (select @csum := 0) params;

В частности, вы хотите, чтобы order by в подзапросе был уверен, что данные обрабатываются в правильном порядке.

0 голосов
/ 21 марта 2019

Вы можете использовать переменную:

SET @cumulative := 0;
SELECT date, (@cumulative := @cumulative+value) as value FROM tabelA

Это будет просто отслеживать текущую сумму. Это просто незначительная адаптация этого ответа для получения номера строки.

0 голосов
/ 21 марта 2019
SELECT
    b.date,( SELECT sum( a.`value` ) FROM aa a WHERE a.date <= b.date ) value
FROM
    aa b 
GROUP BY
    b.date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...