寻求
查询选择所有以“Vancouver”开头且距离所有以“Vancouver”开头的位置中心 5 分钟范围内的点。例如,Vancouver South Fraser、Vancouver Fairview 和 Vancouver Ballantree Place W 的纬度和经度在其平均经纬度的 5 分钟内。纬度和经度存储为 (4915, 12311) 整数对(表示 49.15'N 和 123.11'W)。
SQL 代码
下面的 SQL 可恶就可以解决问题:
SELECT
NAME
FROM
STATION
WHERE
DISTRICT_ID = '110'
AND NAME LIKE 'Vancouver%'
AND LATITUDE BETWEEN
(SELECT round((min(LATITUDE) + max(LATITUDE)) / 2)-5 FROM STATION WHERE DISTRICT_ID = '110' AND NAME LIKE 'Vancouver%')
and
(SELECT round((min(LATITUDE) + max(LATITUDE)) / 2)+5 FROM STATION WHERE DISTRICT_ID = '110' AND NAME LIKE 'Vancouver%')
AND LONGITUDE BETWEEN
(SELECT round((min(LONGITUDE) + max(LONGITUDE)) / 2)-5 FROM STATION WHERE DISTRICT_ID = '110' AND NAME LIKE 'Vancouver%')
and
(SELECT round((min(LONGITUDE) + max(LONGITUDE)) / 2)+5 FROM STATION WHERE DISTRICT_ID = '110' AND NAME LIKE 'Vancouver%')
ORDER BY
LATITUDE
问题
如何在不使用视图的情况下简化此查询以消除冗余?
限制
数据库是 MySQL,但 ANSI SQL 总是很好。
谢谢!