test=*# create table umsatz (Kunde text, Monat text, Umsatz int);
CREATE TABLE
test=*# insert into umsatz select
'Kunde ' || k::text
, '2017/' || m.m::text
, (random()*1000)::int
from generate_Series(1,5) k
cross join (
select * from generate_series(1,6)) m(m);
INSERT 0 30
test=*# select * from umsatz ;
kunde | monat | umsatz
---------+--------+--------
Kunde 1 | 2017/1 | 340
Kunde 1 | 2017/2 | 270
Kunde 1 | 2017/3 | 130
Kunde 1 | 2017/4 | 184
Kunde 1 | 2017/5 | 172
Kunde 1 | 2017/6 | 298
Kunde 2 | 2017/1 | 864
Kunde 2 | 2017/2 | 594
Kunde 2 | 2017/3 | 902
Kunde 2 | 2017/4 | 936
Kunde 2 | 2017/5 | 508
Kunde 2 | 2017/6 | 811
Kunde 3 | 2017/1 | 83
Kunde 3 | 2017/2 | 36
Kunde 3 | 2017/3 | 659
Kunde 3 | 2017/4 | 284
Kunde 3 | 2017/5 | 759
Kunde 3 | 2017/6 | 862
Kunde 4 | 2017/1 | 915
Kunde 4 | 2017/2 | 845
Kunde 4 | 2017/3 | 333
Kunde 4 | 2017/4 | 110
Kunde 4 | 2017/5 | 443
Kunde 4 | 2017/6 | 247
Kunde 5 | 2017/1 | 402
Kunde 5 | 2017/2 | 394
Kunde 5 | 2017/3 | 33
Kunde 5 | 2017/4 | 969
Kunde 5 | 2017/5 | 742
Kunde 5 | 2017/6 | 713
(30 Zeilen)
--
-- einzeln nach Kunde oder Monat gruppiert
--
test=*# select kunde, sum(umsatz) from umsatz group by kunde;
kunde | sum
---------+------
Kunde 3 | 2683
Kunde 4 | 2893
Kunde 1 | 1394
Kunde 5 | 3253
Kunde 2 | 4615
(5 Zeilen)
test=*# select monat, sum(umsatz) from umsatz group by monat;
monat | sum
--------+------
2017/5 | 2624
2017/1 | 2604
2017/4 | 2483
2017/6 | 2931
2017/3 | 2057
2017/2 | 2139
(6 Zeilen)
--
-- nach Kunde UND Monat gruppiert
--
test=*# select kunde, monat, sum(umsatz) from umsatz group by grouping sets (kunde,(monat),());
kunde | monat | sum
---------+--------+-------
Kunde 1 | | 1394
Kunde 2 | | 4615
Kunde 3 | | 2683
Kunde 4 | | 2893
Kunde 5 | | 3253
| | 14838
| 2017/1 | 2604
| 2017/2 | 2139
| 2017/3 | 2057
| 2017/4 | 2483
| 2017/5 | 2624
| 2017/6 | 2931
(12 Zeilen)
--
-- ROLLUP
--
test=*# select kunde, monat, sum(umsatz) from umsatz group by rollup (kunde,monat);
kunde | monat | sum
---------+--------+-------
Kunde 1 | 2017/1 | 340
Kunde 1 | 2017/2 | 270
Kunde 1 | 2017/3 | 130
Kunde 1 | 2017/4 | 184
Kunde 1 | 2017/5 | 172
Kunde 1 | 2017/6 | 298
Kunde 1 | | 1394
Kunde 2 | 2017/1 | 864
Kunde 2 | 2017/2 | 594
Kunde 2 | 2017/3 | 902
Kunde 2 | 2017/4 | 936
Kunde 2 | 2017/5 | 508
Kunde 2 | 2017/6 | 811
Kunde 2 | | 4615
Kunde 3 | 2017/1 | 83
Kunde 3 | 2017/2 | 36
Kunde 3 | 2017/3 | 659
Kunde 3 | 2017/4 | 284
Kunde 3 | 2017/5 | 759
Kunde 3 | 2017/6 | 862
Kunde 3 | | 2683
Kunde 4 | 2017/1 | 915
Kunde 4 | 2017/2 | 845
Kunde 4 | 2017/3 | 333
Kunde 4 | 2017/4 | 110
Kunde 4 | 2017/5 | 443
Kunde 4 | 2017/6 | 247
Kunde 4 | | 2893
Kunde 5 | 2017/1 | 402
Kunde 5 | 2017/2 | 394
Kunde 5 | 2017/3 | 33
Kunde 5 | 2017/4 | 969
Kunde 5 | 2017/5 | 742
Kunde 5 | 2017/6 | 713
Kunde 5 | | 3253
| | 14838
(36 Zeilen)
--
-- CUBE
--
test=*# select kunde, monat, sum(umsatz) from umsatz group by cube (kunde,monat);
kunde | monat | sum
---------+--------+-------
Kunde 1 | 2017/1 | 340
Kunde 1 | 2017/2 | 270
Kunde 1 | 2017/3 | 130
Kunde 1 | 2017/4 | 184
Kunde 1 | 2017/5 | 172
Kunde 1 | 2017/6 | 298
Kunde 1 | | 1394
Kunde 2 | 2017/1 | 864
Kunde 2 | 2017/2 | 594
Kunde 2 | 2017/3 | 902
Kunde 2 | 2017/4 | 936
Kunde 2 | 2017/5 | 508
Kunde 2 | 2017/6 | 811
Kunde 2 | | 4615
Kunde 3 | 2017/1 | 83
Kunde 3 | 2017/2 | 36
Kunde 3 | 2017/3 | 659
Kunde 3 | 2017/4 | 284
Kunde 3 | 2017/5 | 759
Kunde 3 | 2017/6 | 862
Kunde 3 | | 2683
Kunde 4 | 2017/1 | 915
Kunde 4 | 2017/2 | 845
Kunde 4 | 2017/3 | 333
Kunde 4 | 2017/4 | 110
Kunde 4 | 2017/5 | 443
Kunde 4 | 2017/6 | 247
Kunde 4 | | 2893
Kunde 5 | 2017/1 | 402
Kunde 5 | 2017/2 | 394
Kunde 5 | 2017/3 | 33
Kunde 5 | 2017/4 | 969
Kunde 5 | 2017/5 | 742
Kunde 5 | 2017/6 | 713
Kunde 5 | | 3253
| | 14838
| 2017/1 | 2604
| 2017/2 | 2139
| 2017/3 | 2057
| 2017/4 | 2483
| 2017/5 | 2624
| 2017/6 | 2931
(42 Zeilen)