sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL MAX y GROUP BY

La consulta más corta (y posiblemente la más rápida) sería con DISTINCT ON , una extensión PostgreSQL del estándar SQL DISTINCT cláusula:

SELECT DISTINCT ON (1)
       id, count, year
FROM   tbl
ORDER  BY 1, 2 DESC, 3;

Los números se refieren a posiciones ordinales en el SELECT lista. Puede deletrear los nombres de las columnas para mayor claridad:

SELECT DISTINCT ON (id)
       id, count, year
FROM   tbl
ORDER  BY id, count DESC, year;

El resultado está ordenado por id etc. que pueden o no ser bienvenidos. Es mejor que "indefinido" en cualquier caso.

También rompe empates (cuando varios años comparten el mismo recuento máximo) de una manera bien definida:elija el año más antiguo. Si no le importa, suelte year del ORDER BY . O elige el último año con year DESC .

Para muchos filas por id , otras técnicas de consulta son (mucho) más rápidas. Ver: