我有一個城市的表格,其中包括人口,經度和緯度。我也有一張機場的表格,裏面有各種信息,包括經度和緯度。從一個表中選擇項目與記錄匹配的子項中的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