PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL MAX und GROUP BY

Die kürzeste (und möglicherweise schnellste) Abfrage wäre mit DISTINCT ON , eine PostgreSQL-Erweiterung des SQL-Standards DISTINCT Klausel:

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

Die Zahlen beziehen sich auf Ordinalstellen im SELECT aufführen. Zur Verdeutlichung können Sie Spaltennamen buchstabieren:

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

Das Ergebnis ist nach id geordnet usw., die willkommen sein können oder nicht. Es ist auf jeden Fall besser als "undefiniert".

Es bricht auch Bindungen (wenn mehrere Jahre dieselbe maximale Anzahl haben) auf eine genau definierte Weise:Wählen Sie das früheste Jahr. Wenn es Ihnen egal ist, lassen Sie year fallen aus dem ORDER BY . Oder wählen Sie das neueste Jahr mit year DESC .

Für viele Zeilen pro id , andere Abfragetechniken sind (viel) schneller. Siehe: