PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Perché non posso utilizzare gli alias di colonna nella successiva espressione SELECT?

Puoi utilizzare un alias creato in precedenza in GROUP BY o HAVING istruzione ma non in un SELECT o WHERE dichiarazione. Questo perché il programma elabora tutti i SELECT contemporaneamente e non conosce ancora il valore dell'alias.

La soluzione è incapsulare la query in una sottoquery e quindi l'alias è disponibile all'esterno.

SELECT stddev_time, max_time, avg_time, min_time, cnt, 
       ROUND(avg_time * cnt, 2) as slowdown
FROM (
        SELECT 
            COALESCE(ROUND(stddev_samp(time), 2), 0) as stddev_time, 
            MAX(time) as max_time, 
            ROUND(AVG(time), 2) as avg_time, 
            MIN(time) as min_time, 
            COUNT(path) as cnt, 
            path
        FROM 
            loadtime
        GROUP BY
            path
        ORDER BY
            avg_time DESC
        LIMIT 10
   ) X;