1

国を 1 列目に、その国の総人口を 2 列目に国別に人口グループを表示するクエリがあるとします。

これを達成するために、次のクエリがあります。

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

ここで、そのクエリにさらに 2 つの列を導入して、各国の男性と女性の人口を表示したいと思います。

私が達成したいことは、次のようになります。

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. 「partition by 句」は「group by」クエリでは使用できません
  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 に答える