SQL(COUNT(*)/ locations.area)

问题描述 投票:0回答:2

我们在学校学习SQL,我的教授在他的文档中有这个sql代码。

SELECT wp.city, (COUNT(*) / locations.area) AS population_density
FROM world_poulation AS wp 
INNER JOIN location
ON wp.city = locations.city
WHERE locations.state = “Hessen”
GROUP BY wp.city, locations.area

对我来说一切都很清楚,只是使用/locations.area的聚合函数对我没有任何意义。有人可以帮忙吗?

先感谢您!

sql
2个回答
0
投票

查看查询的分组内容,告诉您每个组的组成。在这种情况下,每个组都是一个城市,并包含wp.city具有相同值的所有行(并且由于location表也加入了该值,因此locations.area仅包含在分组中,以便可以在结果)。

因此每个组都有多个行,而COUNT(*)聚合将包含每个组的行数。 (COUNT(*) / locations.area)的值将是该组中的行数除以该组的locations.area值。

如果您有这样的数据:

world_population
name      city
--------- ---------
John      London
Peter     London
Sarah     London
Malcolm   London
Ian       Cardiff
Johanna   Stockholm
Sven      Stockholm
Egil      Stockholm

locations
city        state          area
----------- -------------- ---------
London      Hessen         2
Cardiff     Somehere else  14
Stockholm   Hessen         1

然后你会得到两组的结果(因为加的夫不在Hessen州)。一组有4人来自伦敦,其中面积为2,因此人口密度为2.另一组有来自斯德哥尔摩的三人,面积为1,因此人口密度为3。


旁注:查询中有一个拼写错误,因为它连接在表location中,但在其他地方称为locations


0
投票

尝试写它像:

SELECT wp.city,
locations.area,
COUNT(*) AS population,
(COUNT(*) / locations.area) AS population_density
FROM world_poulation AS wp
INNER JOIN location
ON wp.city = locations.city
WHERE locations.state = “Hessen”
GROUP BY wp.city, locations.area

关键是GROUP BY语句。您正在显示成对的城市和地区。 COUNT(*)是通过加入世界人口和位置而在您创建的表格中显示给定对的次数。该区域只是一个数字,因此您可以将该区域除以COUNT。

© www.soinside.com 2019 - 2024. All rights reserved.