sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL MAX og GROUP BY

Den korteste (og muligvis hurtigste) forespørgsel ville være med DISTINCT ON , en PostgreSQL-udvidelse af SQL-standarden DISTINCT klausul:

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

Tallene henviser til ordenspositioner i SELECT liste. Du kan stave kolonnenavne for klarhedens skyld:

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

Resultatet er sorteret efter id osv. som måske eller måske ikke er velkomne. Det er under alle omstændigheder bedre end "udefineret".

Det bryder også båndene (når flere år deler det samme maksimale antal) på en veldefineret måde:vælg det tidligste år. Hvis du er ligeglad, så drop year fra ORDER BY . Eller vælg det seneste år med year DESC .

For mange rækker pr. id , andre forespørgselsteknikker er (meget) hurtigere. Se:



  1. hvordan man skriver mysql trigger

  2. Laravel localhost virker, men heroku giver 500 fejl

  3. Send SQL-funktioner i dplyr-filterfunktionen på databasen

  4. Giv en bruger tilladelse til kun at se en MySQL-visning og intet andet