PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL - cláusula GROUP BY ou ser usado em uma função agregada


Uma consulta como esta (recuperando todas ou a maioria das linhas) é mais rápida se você GROUP antes de JOIN . Assim:
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;

Dessa forma, você precisa de muito menos operações de junção. E as linhas da tabela cars não precisam ser multiplicados primeiro juntando-se a muitos usuários cada e depois agrupados de volta para serem únicos novamente.
Apenas a tabela certa deve ser agrupada, o que torna a lógica mais simples também.