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

PostgreSQL - clausola GROUP BY o da utilizzare in una funzione aggregata

Una query come questa (che recupera tutte o la maggior parte delle righe) è più veloce se GROUP prima di JOIN . In questo modo:

SELECT id, name, created_at, updated_at, u.ct
FROM   cars c
LEFT   JOIN (
    SELECT car_id, count(*) AS ct
    FROM   users
    GROUP  BY 1
    ) u ON u.car_id  = c.id
ORDER  BY u.ct DESC;

In questo modo sono necessarie molte meno operazioni di unione. E le righe della tabella cars non deve essere prima moltiplicato unendosi a più utenti ciascuno e poi raggruppato di nuovo per essere di nuovo unico.
È necessario raggruppare solo la tabella giusta, il che semplifica anche la logica.