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

PostgreSQL MAX e GROUP BY

La query più breve (e forse più veloce) sarebbe con DISTINCT ON , un'estensione PostgreSQL dello standard SQL DISTINCT clausola:

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

I numeri si riferiscono alle posizioni ordinali nel SELECT elenco. Puoi precisare i nomi delle colonne per maggiore chiarezza:

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

Il risultato è ordinato per id ecc. che possono o non possono essere i benvenuti. In ogni caso è meglio di "non definito".

Rompe anche i pareggi (quando più anni condividono lo stesso conteggio massimo) in un modo ben definito:scegli il primo anno. Se non ti interessa, rilascia year dal ORDER BY . Oppure scegli l'ultimo anno con year DESC .

Per molti righe per id , altre tecniche di query sono (molto) più veloci. Vedi: