2016-05-20 3 views
1

ich eine Abfrage in pgAdmin leite aber Problem Spalt Abstand gegenüber existieren nichtSpalt Klausel in mit nicht Thema in Lehre existiert und pgAdmin

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 having distance<1 order by distance desc 

Vielen Dank im Voraus für jede Hilfe.

Grüße,

Aisha

Antwort

2

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