SQL(计数(*)/locations.area)

SQL(计数(*)/locations.area),sql,Sql,我们在学校学习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 对我来说一切都很清楚,

我们在学校学习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的聚合函数对我来说没有任何意义。有人能帮忙吗


提前谢谢你

查看查询分组的内容,这会告诉您每个组由什么组成。在这种情况下,每个组都是一个城市,并且包含具有相同值的所有行(由于
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
然后你会得到两组的结果(因为加的夫不在黑森州)。一组有四个人来自伦敦,那里有2区,所以人口密度是2。另一组有三个人来自斯德哥尔摩,那里有1区,所以人口密度是3


旁注:查询中有一个输入错误,因为它在表
location
中联接,但在其他任何地方都将其称为
locations

尝试这样编写:

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

关键是GROUPBY语句。您正在展示成对的城市和地区。COUNT(*)是通过加入世界人口和位置创建的表中显示给定对的次数。面积只是一个数字,所以你可以将面积除以计数。

什么不合理?两个数字被彼此除?