MYSQL: увеличение значения от строки к строке с помощью GROUP BY - PullRequest
0 голосов
/ 12 ноября 2018

Я хотел бы добавить значения счетчика из месяца в месяц.Мои данные выглядят так:

| Date       | Energy_produced |
--------------------------------
| 2011-01-01 | 12              |  
| 2017-01-02 | 23              |  
| 2017-01-03 | 25              |  
...
| 2011-02-01 | 11              |  
| 2017-02-02 | 12              |  
| 2017-02-03 | 17              | 

Результатом GROUP BY будет СУММА значений "Energy_produced" за каждый месяц, но я бы хотел, чтобы сумма была добавлена:

| Month   | Energy_produced_added_up |
--------------------------------------
| 2011-01 | 60                       |  
| 2017-02 | 100                      | 

Я прочитал много статей и понял, что могу использовать переменную:

set @result := 0;
SELECT 
    DATE_FORMAT(t.Datum_Maand, '%m') AS measurement_month, 
    DATE_FORMAT(t.Datum_Maand, '%Y') AS measurement_year,
    (@result := @result + SUM(t.Geg_Maand)) AS SUMME
FROM tgeg_maand AS t
GROUP BY measurement_year, measurement_month
ORDER BY measurement_year, measurement_month

С GROUP BY значение не суммируется.Вышеприведенное утверждение отображает тот же результат, что и:

SELECT 
    DATE_FORMAT(t.Datum_Maand, '%m') AS measurement_month, 
    DATE_FORMAT(t.Datum_Maand, '%Y') AS measurement_year,
    SUM(t.Geg_Maand) AS SUMME
FROM tgeg_maand AS t
GROUP BY measurement_year, measurement_month
ORDER BY measurement_year, measurement_month

Что я делаю не так?

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Сначала необходимо выполнить суммирование по месяцам, а затем суммировать месячные значения. Для этого вам нужно превратить исходный запрос в подзапрос:

set @result := 0;
SELECT measurement_month, measurement_year,
       @result := @result + monthly_sum AS SUMME
FROM (SELECT DATE_FORMAT(t.Datum_Maand, '%m') AS measurement_month, 
             DATE_FORMAT(t.Datum_Maand, '%Y') AS measurement_year,
             SUM(t.Geg_Maand) AS monthly_sum
      FROM tgeg_maand AS t
      GROUP BY measurement_year, measurement_month) mm
ORDER BY measurement_year, measurement_month
0 голосов
/ 12 ноября 2018

Используйте этот запрос

SELECT 
    DATE_FORMAT(t.Datum_Maand, '%m') AS measurement_month, 
    DATE_FORMAT(t.Datum_Maand, '%Y') AS measurement_year,
    SUM(t.Geg_Maand) AS SUMME
FROM tgeg_maand AS t
GROUP BY measurement_year, measurement_month
ORDER BY measurement_year, measurement_month
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...