2015-12-16 2 views
3

Мне нужно рассчитать подсчеты по городу, стране и стране. Например, если у меня есть следующие данные в моей таблице T1:Postgresql подсказать количество групп в одном запросе

name  city state country 
------------------------------ 
name1  c1  s1  C1 
name2  c1  s1  C1 
name3  c2  s1  C1 
name4  c3  s1  C1 
name5  c4  s2  C1 
name6  c5  s2  C1 
name7  c5  s3  C1 
name8  c12 s12  C2 

запрос должен приводит:

city state country citycount, statecount, countrycount 
------------------------------------------------------------------- 
c1  s1  C1  2   4    7 
c2  s1  C1  1   4    7 
c3  s1  C1  1   4    7 
c4  s2  C1  1   2    7 
c5  s2  C1  1   2    7 
c5  s3  C1  1   1    7 
c12  s12  C2  1   1    1 

если я сделать группу, и подсчитать, то мне нужно написать 3 различных запросов. Но я хочу сделать это в одном запросе. пожалуйста помоги.

ответ

2

Вы можете использовать window functions, например, один из решений может быть такой:

SELECT DISTINCT city 
    ,STATE 
    ,country 
    ,count(*) OVER (PARTITION BY city,STATE,country) AS citycount 
    ,count(*) OVER (PARTITION BY STATE,country) AS statecount 
    ,count(*) OVER (PARTITION BY country) AS countrycount 
FROM T1 
ORDER BY city 
    ,STATE 
    ,country 

Пожалуйста, смотрите скрипку here.

Смежные вопросы