Re: window function ?

Andreas Kretschmer <[email protected]>
Newsgroups gmane.comp.db.postgresql.sql
Message-ID <[email protected]>

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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.