Home > database >  Calculate porcentage of occurrence between 2 columns
Calculate porcentage of occurrence between 2 columns

Time:09-29

A have a table in postgresql like this:

elem1 elem2
A A
A A
A B
A C
B D
B C
C E

And I wish to do do a query that get all pairs and its relative percentage of elem2 that matches elem 1. The output would be like this:

elem1 elem2 percentage
A A 0.5
A B 0.25
A C 0.25
B D 0.5
B C 0.5
C E 1

CodePudding user response:

You need to independently count elem1 and (elem1,elem2). You can get this with a CTE for each. Then JOIN them on elem1 and compute the percentage of elem1 to elem2. (see demo)

with e1(elem1, c1) as   
       ( select elem1, count(*) 
           from test 
          group by elem1 
       )  
   , e2(elem1,elem2,c2) as  
       ( select elem1, elem2, count(*) 
           from test 
          group by elem1, elem2
       ) 
select e2.elem1, e2.elem2, round((1.0 * c2)/c1,2) percentage
  from e1 
  join e2 on (e2.elem1 = e1.elem1)
 order by e2.elem1, e2.elem2;
  • Related