sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL MAX och GROUP BY

Den kortaste (och möjligen snabbaste) frågan skulle vara med DISTINCT ON , en PostgreSQL-tillägg av SQL-standarden DISTINCT klausul:

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

Siffrorna hänvisar till ordningspositioner i SELECT lista. Du kan stava kolumnnamn för tydlighetens skull:

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

Resultatet är sorterat efter id etc. som kanske är välkomna eller inte. Det är bättre än "odefinierat" i alla fall.

Det bryter också banden (när flera år delar samma maximala antal) på ett väldefinierat sätt:välj det tidigaste året. Om du inte bryr dig, släpp year från ORDER BY . Eller välj det senaste året med year DESC .

För många rader per id , andra frågetekniker är (mycket) snabbare. Se:



  1. SQL SELECT WHERE rad innehåller ord

  2. En guide till MariaDB Columnstore för MySQL-administratörer

  3. Data från databasen visas inte i tabellen på HTML-webbplatsen

  4. Exportera SQLite-databas till XML-fil