2012-11-05 35 views
3

我还是个新手,我刚刚使用了postgresql一个星期。我有点困惑..如何在where子句中使用sum来计算avg

我使用NY数据集(http://workshops.opengeo.org/postgis-intro/about_data.html)。

我必须找到一种方法来列出亚洲人口数量多于相应自治市镇平均水平的所有社区,我必须展示亚洲人口的百分比。

我想到这个问题:

select name, 100 * sum(c.popn_asian)/(select (avg(popn_asian)) from nyc_census_blocks group by boroname) 
from nyc_neighborhoods n, nyc_census_blocks c 
where (ST_Contains(n.geom, c.geom) = true) 
and (sum(c.popn_asian)) > (select avg(popn_white) from nyc_census_blocks c1 group by c1.boroname) 

,但我不出声显然where子句后使用总和......我想知道为什么,并学习如何解决这个问题。

感谢

+0

现在这样呢? –

回答

1

您需要使用having条款针对此问题。

+1

我正在尝试,但它仍然无法正常工作。 – Tsirkuse

5
select name, 100 * sum(c.popn_asian)/(select (avg(popn_asian)) from nyc_census_blocks group by boroname) 
from nyc_neighborhoods n, nyc_census_blocks c 
where ST_Contains(n.geom, c.geom) = true 
group by name 
having sum(c.popn_asian) > (select avg(popn_white) from nyc_census_blocks c1 group by c1.boroname) 
+0

它不起作用。它说,不能有多于一个的结果和轻描淡写。 通过c1.boroname 从nyc_census_blocks c1组中选择avg(popn_asian)(它不是白色但是亚洲人,但不会改变任何东西)。我想这是问题所在,平均值(popn_asian)必须高于邻域所在区域的平均值,所以我想我需要添加一些东西,如c1.boroname = n.boroname 但不工作要么... – Tsirkuse