クエスト
このクエリは、「Vancouver」で始まるすべてのポイントを選択し、「Vancouver」で始まるすべての場所の中心から 5 分のエリア内にあります。たとえば、Vancouver South Fraser、Vancouver Fairview、Vancouver Ballantree Place W の緯度と経度は、それぞれの平均緯度と経度から 5 分以内です。緯度と経度は (4915, 12311) の整数のペア (北緯 49.15 度と西経 123.11 度) として格納されます。
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 は常に優れています。
ありがとうございました!