Soweit ich weiß, postgresql keine Möglichkeit hat, direkt eine Alias-Spalte in where-Klausel zu verwenden. So sollten Sie entweder versuchen, die Logik zu duplizieren:
SELECT
f.title,
f.longitude,
f.latitude,
(3959 * cos(cos(radians('52.512452')) * cos(radians(latitude)) * cos(radians(longitude)
- radians('13.390931')) + sin(radians('52.512452')) * sin(radians(latitude)))) AS distance
FROM fitness_studio f
WHERE (3959 * cos(cos(radians('52.512452')) * cos(radians(latitude)) *
cos(radians(longitude) - radians('13.390931')) +
sin(radians('52.512452')) * sin(radians(latitude)))) < 1
ORDER BY distance DESC
entweder eine Unterabfrage zu verwenden:
WITH container AS (
SELECT
f.title,
f.longitude,
f.latitude,
(3959 * cos(cos(radians('52.512452')) * cos(radians(latitude)) *
cos(radians(longitude) - radians('13.390931')) +
sin(radians('52.512452')) * sin(radians(latitude)))) AS distance
FROM fitness_studio f)
SELECT *
FROM container
WHERE distance < 1
ORDER BY distance DESC
Bitte beachten Sie, dass eine solche Unterabfrage negativ Ausführungsplan beeinflussen können, und wenn Sie Ihren Tisch groß genug ist, Ausführungsgeschwindigkeit wird wichtiger als Abfrage Ungeschicklichkeit.
PS: Beachten Sie, dass ORDER BY korrekt Alias als Parameter erhalten kann. Angenommen, ORDER BY wirkt sich nicht auf ausgewählte Zeilen aus, sondern rotiert sie einfach. Gleiches Bild mit GROUP BY