1

假设我们有一个查询,按国家/地区显示人口组,将国家作为第一列,该国家的总人口作为第二列。

为此,我有以下查询:

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. “分组依据”查询中不允许“分区依据子句”
  2. “partition by”子句中不允许使用“where 子句”

我希望你明白这一点。请原谅我的语法和我给它命名的方式(无法知道更好的描述)。

4

1 回答 1

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

于 2012-07-19T08:31:35.240 回答