Summe-wenn

Hallo

Ich bräuchte so ne Art “Summe Wenn”, ich müsste die Summe der bisherigen Wochenumsätze zusammenzählen
also in KW 1 soll nur diese Woche sein
bei KW2 soll die Summe von KW1 und KW 2 sein, bei KW 3 die Summer der ersten 3 Wochen u.s.w.

Tabelle:
KW | Umsatz
1 | 10
2 | 12
3 | 7
4 | 9

Will ich als Ergebnis haben:
KW | Umsatz
1 | 10
2 | 22
3 | 29
4 | 38

habe leider keine Lösung gefunden, hoffe ihr könnt mir helfen.

lg S.

test=# create table schlaftablette(kw int, umsatz int);
CREATE TABLE
test=*# copy schlaftablette from stdin;
Geben Sie die zu kopierenden Daten ein, gefolgt von einem Zeilenende.
Beenden Sie mit einem Backslash und einem Punkt alleine auf einer Zeile.
>> 1	10
>> 2	12
>> 3	7
>> 4	9
>> \.
COPY 4
test=*# select *, sum(umsatz) over (order by kw) from schlaftablette order by kw;
 kw | umsatz | sum 
----+--------+-----
  1 |     10 |  10
  2 |     12 |  22
  3 |      7 |  29
  4 |      9 |  38
(4 Zeilen)

test=*# rollback;
ROLLBACK
test=#

Gähn

super, das hilft schon mal weiter.
hatte leider vorher übersehen, hab noch Teams dabei (bzw. später noch das Jahr)

Tabelle:
KW | Umsatz | Team
1 | 10 | A
1 | 11 | B
2 | 12 | A
2 | 14 | B
3 | 7 | A
3 | 7 | B

KW | Umsatz | Team
1 | 10 | A
1 | 11 | B
2 | 22 | A
2 | 25 | B
3 | 29 | A
3 | 32 | B

in das over(…) noch zusätzlich: ‘partition by team’.

Super, Danke, funktioniert genial !!!

joa. Schau Dir die Doku zu Window-Funktionen an. Das ist sehr mächtiges Zeugs.

Hallo

So, ich stehe wieder einmal an.
Wenn ich die bisher gut funktionierende Abfrage etwas abändere, bekomme ich laufend eine Fehlermeldung, hier mal meine derzeitige Abfrage:

                 select  
                 substring(betreuungsteam,6) || EXTRACT(year FROM fakturadatum) || EXTRACT(WEEK FROM fakturadatum) as key
                 ,betreuungsteam 
                 ,EXTRACT(year FROM fakturadatum) jahr
                 ,EXTRACT(WEEK FROM fakturadatum) KW 
                 ,avg(marge_intverr) as wochenmittelwert
                 ,count(marge_intverr)
                ,avg(marge_intverr)  over (partition by betreuungsteam)  -- Hier der Fehler
                 from ( 
                                select 
				team as betreuungsteam,
				*
				from zz_sd_marge 
				left join betreuungsteams on betreuungsteams.vkg = a_betr
				where verrpreis > 0
                ) zz_und_auftrag 
                 where fakturadatum >= date('2015-01-01') 
                 group by 1,2,3,4
                 order by jahr desc, kw desc,betreuungsteam desc

Im inneren Select-Statement habe ich einfach eine Liste mit verkäufen, und die Marge dazu, verbunden mit einem Betreuungsteam.
Die letzte zeile im Select:

 ,avg(marge_intverr)  over (partition by betreuungsteam)

gibt mir folgenden Fehler:
FEHLER: Spalte „zz_und_auftrag.marge_intverr“ muss in der GROUP-BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden
Ich will hier den Mittelwert haben pro betreuungsteam, schaffe dies aber leider nicht, trotz langer recherche im Internet
Ich finde auch keinen wirklichen Unterschied zu dem funktionierenden Statement, wo ich die Partition over schon verwende.

Roland

Du hast da noch ein anderes avg() drin, ohne over(), dafür ein GROUP BY. Du kannst das nicht mixen mit einer weiteren avg(), diese aber als Window-Funktion. Laß also das GROUP BY weg und erweitere die andere avg() - Funktion um eine passende over() - Definition.

okay, danke, danke hinweis hatte ich nirgends gefunden.
dann wird ich mal alles mit over Partition machen, und dann darüber ne abfrage die dann im nachhinein alles gruppiert.

R.