我有一个城市的表格,其中包括人口,经度和纬度。我也有一张机场的表格,里面有各种信息,包括经度和纬度。从一个表中选择项目与记录匹配的子项中的HAVING
这样的查询大致获得一个给定的纬度和经度为100公里之内的所有城镇的人口:
SELECT SUM(cty_population) as cty_population_total FROM
(SELECT
cty_population, (
6371 * acos (
cos (radians(37.61899948))
* cos(radians(cty_latitude))
* cos(radians(cty_longitude) - radians(-122.37500000))
+ sin (radians(37.61899948))
* sin(radians(cty_latitude))
)
) AS cty_distance
FROM cities
HAVING cty_distance < 100) cty_population_alias
这会给这样的结果:
cty_population_total
6541221
在上述查询,37.61899948是纬度和-122.37500000是经度。
我的问题是:我可以从机场表中选择任意数量的机场,将它们的经度和纬度传递到这个子查询中以代替上述数字,并且找到每个机场100公里范围内的城市人口。理想情况下,我会有这样的结果:
airport_name airport_pop
Boston Logan 6654901
London Heathrow 11345690
...等。
我可以用脚本来做到这一点,但我想知道是否可以单独使用SQL来完成?数据库引擎是MySQL。
你有什么用'HAVING'取代'的理由。那里呢? – apokryfos
WHERE抛出错误:“'where子句'”中的未知列'cty_distance'。据我所知,你必须使用HAVING和别名。 – suzerain
看到一个没有GROUP BY的'HAVING'只是很奇怪我会亲自做一些像'WHERE(距离计算)<100'的东西,但那只是我。 – apokryfos