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

PostgreSQL MAX e GROUP BY


A consulta mais curta (e possivelmente mais rápida) seria com DISTINCT ON , uma extensão PostgreSQL do padrão SQL DISTINCT cláusula:
SELECT DISTINCT ON (1)
       id, count, year
FROM   tbl
ORDER  BY 1, 2 DESC, 3;

Os números referem-se a posições ordinais no SELECT Lista. Você pode soletrar os nomes das colunas para maior clareza:
SELECT DISTINCT ON (id)
       id, count, year
FROM   tbl
ORDER  BY id, count DESC, year;

O resultado é ordenado por id etc. que podem ou não ser bem-vindos. É melhor do que "indefinido" em qualquer caso.

Também desempate (quando vários anos compartilham a mesma contagem máxima) de uma maneira bem definida:escolha o ano mais antigo. Se você não se importa, solte year do ORDER BY . Ou escolha o ano mais recente com year DESC .

Para muitos linhas por id , outras técnicas de consulta são (muito) mais rápidas. Ver: