2012-07-19 98 views
1

說我們有一個查詢,顯示國家的人口組作爲第一列,該國的總人口作爲第二列。有沒有辦法對具有「group by」子句的查詢進行分區?

要做到這一點,我有以下查詢:

select 
    i.country, 
    count(1) population 
from 
    individual i 
group by 
    i.country 

現在我要介紹的兩列到查詢,顯示男性和女性對每個國家的人口。

我要實現的可能類似於這樣的東西是什麼:

select 
    i.country, 
    count(1) population total_population, 
    count(1) over (partition by 1 where i.gender='male') male_population, 
    count(1) over (partition by 1 where i.gender='female') female_population, 
from 
    individual i 
group by 
    i.country 

這樣做的問題是,

  1. 「by子句分區」不是在「分組依據」查詢允許
  2. 「where子句」不是「分區的」條款

允許,我希望你得到的點。請原諒我的語法和我標題的方式(不知道更好的描述)。

回答

3

你並不需要在這裏分析功能:

select 
    i.country 
,count(1) population 
,count(case when gender = 'male' then 1 end) male 
,count(case when gender = 'female' then 1 end) female 
from 
    individual i 
group by 
    i.country 
; 

看到http://www.sqlfiddle.com/#!4/7dfa5/4

+0

做這件事的工作與AVG()函數呢? – supertonsky 2012-07-19 09:42:34

+0

它的工作原理,謝謝。 – supertonsky 2012-07-19 09:46:33

+0

avg()也適用,每個非空值都被考慮在內 – GWu 2012-07-19 10:39:30

相關問題