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

Antworten auf die Frage(10)

Ihre Antwort auf die Frage