PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL MAX et GROUP BY

La requête la plus courte (et peut-être la plus rapide) serait avec DISTINCT ON , une extension PostgreSQL du standard SQL DISTINCT clause :

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

Les nombres font référence aux positions ordinales dans le SELECT liste. Vous pouvez épeler les noms des colonnes pour plus de clarté :

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

Le résultat est trié par id etc. qui peuvent ou non être les bienvenus. C'est mieux que "undefined" dans tous les cas.

Il rompt également les égalités (lorsque plusieurs années partagent le même nombre maximum) d'une manière bien définie :choisissez l'année la plus ancienne. Si vous ne vous en souciez pas, supprimez year à partir du ORDER BY . Ou choisissez la dernière année avec year DESC .

Pour beaucoup lignes par id , les autres techniques de requête sont (beaucoup) plus rapides. Voir :