# MySQL Zeilen kumulieren



## didi577 (1. Sep 2017)

Hallo,

ich möchte für die Darstellung in einem LineChart Werte einer Tabelle kumulieren.

```
SELECT employe, sum(salary_value), YEAR(salary_date) AS Jahr
FROM myteam.salary
WHERE employe = 11
group by Jahr, employe
order by Jahr
```
ergibt das Bild:

in der mittleren Spalte sollen die Werte aber je Jahr aufaddiert werden, also 
2015 = 50, 
2016 = 270
2017 = 370

in der Tabelle "salary" gibt es diese Struktur:


wer kann mir weiter helfen?


----------



## lordofdonuts (1. Sep 2017)

Hallo didi577,

mir ist nicht ganz klar, was du erreichen willst. 
Willst du die Summe jetzt pro Jahr haben oder pro Jahr und Angestelltem?


----------



## Thallius (2. Sep 2017)

Ich glaube nicht das das ohne subselect gehen wird.

Mit GROUP BY geht das so jedenfalls nicht. 

Gruß

Claus


----------



## didi577 (2. Sep 2017)

Hi,

ich will eine kumulierte Summe des jeweiligen Jahres je Angestellten haben. In 2015 sollen bspw. auch die Werte von 2014, 2013 etc enthalten sein


----------



## Thallius (2. Sep 2017)

Wenn in 2015 auch 2014 und 2013 drin sein soll, dann spielt das datum doch gar keine Rolle oder? Also willst du einfach die Summe aller Zeiten eines Angestellten oder nicht?


----------



## stg (2. Sep 2017)

```
SELECT t1.salary_date,
       t1.employe,
       SUM(t2.salary_value) AS CS
FROM t t1
INNER JOIN t t2
ON t1.salary_date >= t2.salary_date
AND t1.employe = t2.employe
GROUP BY t1.salary_date,
         t1.salary_value,
         t1.employe
ORDER BY t1.employe, t1.salary_date
```

Sollte passen. Eventuell muss den Vergleich beim Datum anpassen, da weiß ich nicht, was mySQL da kann.

Hier auch als kleines sqlfiddle: http://sqlfiddle.com/#!6/53513/1
Da hab ich jetzt auf die schnelle aber für alle Werte Integer genommen, nur als "proof of concept"....


----------



## lordofdonuts (2. Sep 2017)

didi577 hat gesagt.:


> Hi,
> 
> ich will eine kumulierte Summe des jeweiligen Jahres je Angestellten haben. In 2015 sollen bspw. auch die Werte von 2014, 2013 etc enthalten sein


Ich habs noch immer nicht verstanden. Da ist ein Widerspruch drinnen.

Wenn sowieso über alle Jahre summiert werden soll, reicht es die Summe je "employe" (da fehlt übrigens ein 'e') zu gruppieren.

Außer du willst die Gehälter zu einem Stichtag (in diesem Fall Jahr) berechnen können. Dann wirds etwas komplexer. Ist es das, was du willst?


----------



## thecain (2. Sep 2017)

Ich habe es so verstanden: so wie sein Screenshot, aber statt die Jahre einzeln immer aufsummieren. Also 2000, dann. 2000+2001 dann 2000+2001+2002


----------



## didi577 (2. Sep 2017)

Danke für eure Hinweise und Tipps.
Ich speicher in einer Tabelle die jährliche Gehaltsentwicklung von Angestellten. Diese Werte will ich in einem Line Chart als Gehaltsentwicklung darstellen, so wie @thecain es erkannt hat. Ich habe jetzt diesen Code und es funktioniert:

```
SET @sum_profit = 0;
SELECT YEAR(i.salary_date) AS Jahr, max(i.sum_profit) AS Kum
FROM
(SELECT s.salary_date, s.salary_value, @sum_profit:=@sum_profit+s.salary_value sum_profit
FROM myteam.salary s
WHERE employe = 13
ORDER BY s.salary_date) i
group by YEAR(i.salary_date)
;
```



stg hat gesagt.:


> Sollte passen.


Danke für deine Mühe. Das probiere ich auch noch aus und werde es ggf. übernehmen.

Danke für euer Interesse an meinem Problem


----------

