0
我有一個SQL查詢工作正常,但我覺得必須有一個更有效的寫作方式。通過加入兩個包含座標的表A和B,我將比較每個座標之間的距離(以米爲單位)。然後我總結/計數表B中的座標數是座標的設定距離內表A和輸出結果:我可以使這個SQL查詢更有效嗎?
select a.name,
sum(case when ST_GeodesicLengthWGS84(ST_SetSRID(ST_LineString(a.lat, a.lon, b.lat, b.lon),4326)) < 10.0 then 1 else 0 end) 10mCount,
sum(case when ST_GeodesicLengthWGS84(ST_SetSRID(ST_LineString(a.lat, a.lon, b.lat, b.lon),4326)) < 50.0 then 1 else 0 end) 50mCount,
sum(case when ST_GeodesicLengthWGS84(ST_SetSRID(ST_LineString(a.lat, a.lon, b.lat, b.lon),4326)) < 1000.0 then 1 else 0 end) 1000mCount
FROM a JOIN
b
GROUP BY a.name
ORDER by 1000mCount desc
LIMIT 10;
我覺得必須有一個方法來調用ST_GeodesicLengthWGS84(ST_SetSRID(ST_LineString(a.lat, a.lon, b.lat, b.lon), 4326))
一次,得到的結果然後每增加10m,50m和1000m計數。
任何想法? 謝謝。
你還沒有指定任何連接標準 - 你是否真的想要一個交叉連接(b中的每一行加入的每一行)? – Bohemian
你的權利,我只是意識到我不需要加入。但是,我在做這個總和(case when)時最接近最有效的方式嗎? – mike
**我不需要連接**,您已經有一個連接 - 這是一個低效連接(它是一個「交叉連接」)。您需要更好的連接才能使您的查詢更高效。 –