Am 10.12.2017 um 19:33 schrieb Olivier Leprêtre:
>
> Hi,
>
> I have a table containing sort of boxes in different categories
> described by three columns categorie/box/count
>
> In each categorie, I want to associate each box with the count of the
> others (sum of counts of this categorie but not the current one).
>
> As an example :
>
> cat box count
>
> cat1 box21 2
>
> cat1 box23 6
>
> cat1 box34 1
>
> cat1 box37 3
>
> cat3 box45 12
>
> cat3 box62 2
>
> cat3 box89 7
>
> cat3 box12 9
>
> cat3 box28 10
>
> cat8 box02 10
>
> cat8 box87 2
>
> cat8 box46 3
>
> will return
>
> cat1 box21 2 10 (6+1+3) => 2 not added
>
> cat1 box23 6 6 (2+1+3) => 6 not added
>
> cat1 box34 1 11 (2+6+3) => 1 not added
>
> cat1 box37 3 9 (2+6+1) => 3 not added
>
> cat3 box45 12 28 (2+7+9+10)
>
> cat3 box62 2 38 (12+7+9+10)
>
> cat3 box89 7 33 (12+2+9+10)
>
> cat3 box12 9 31 (12+2+7+10)
>
> cat3 box28 10 30 (12+2+7+9)
>
> cat8 box02 10 5 (2+3)
>
> cat8 box87 2 13 (10+3)
>
> cat8 box46 3 12 (10+2)
>
> I searched thru lateral and window functions but didn't manage to do that.
>
>
>
>
>
test=*# select * from boxes ;
cat | box | count
------+-------+-------
cat1 | box21 | 2
cat1 | box23 | 6
cat1 | box34 | 1
cat1 | box37 | 3
cat3 | box45 | 12
cat3 | box62 | 2
cat3 | box89 | 7
cat3 | box12 | 9
cat3 | box28 | 10
cat8 | box02 | 10
cat8 | box87 | 2
cat8 | box46 | 3
(12 Zeilen)
test=*# select cat, box, sum(count) over (partition by cat) - count from
boxes;
cat | box | ?column?
------+-------+----------
cat1 | box21 | 10
cat1 | box23 | 6
cat1 | box34 | 11
cat1 | box37 | 9
cat3 | box45 | 28
cat3 | box62 | 38
cat3 | box89 | 33
cat3 | box12 | 31
cat3 | box28 | 30
cat8 | box02 | 5
cat8 | box87 | 13
cat8 | box46 | 12
(12 Zeilen)
test=*#
helps that?
Regards, Andreas
--
2ndQuadrant - The PostgreSQL Support Company.
www.2ndQuadrant.com