Eliminate subquery for average numeric value
Such
Die Abfrage wählt alle Punkte aus, die mit "Vancouver" beginnen, und befindet sich innerhalb eines Bereichs von 5 Minuten vom Zentrum aller mit "Vancouver" beginnenden Orte entfernt. Beispielsweise haben Vancouver South Fraser, Vancouver Fairview und Vancouver Ballantree Place W Breiten- und Längengrade innerhalb von 5 Minuten von ihrem durchschnittlichen Breiten- und Längengrad. Die Breiten- und Längengrade werden als (4915, 12311) Ganzzahlpaare gespeichert (dh 49,15'N und 123,11'W).
SQL Code
Der folgende SQL-Gräuel macht den Trick:
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
Frag
Wie kann diese Abfrage vereinfacht werden, um die Redundanz zu beseitigen, ohne eine Ansicht zu verwenden?
Beschränkunge
Die Datenbank ist MySQL, aber ANSI SQL ist immer nett.
Vielen Dank