如何在where子句中使用sum计算平均值

3

我对SQL还很陌生,只用了一周的postgresql。我有点卡住了...

我正在使用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子句后面不能使用sum函数...我想知道为什么以及如何解决这个问题。

谢谢


这个进展如何了? - Alex Gordon
2个回答

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) 

它不起作用。它说对于低估,不能有多个结果。 从nyc_census_blocks c1中选择avg(popn_asian) group by c1.boroname(它不是白人而是亚洲人,但这不会改变任何事情)。我猜这就是问题所在,avg(popn_asian)必须高于邻里所在的行政区平均水平,所以我想我需要添加像c1.boroname = n.boroname这样的内容,但那也不起作用... - Tsirkuse

1

你需要使用 having 子句来解决这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接