sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL MAX a GROUP BY

Nejkratší (a možná nejrychlejší) dotaz by byl s DISTINCT ON , rozšíření PostgreSQL standardu SQL DISTINCT klauzule:

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

Čísla odkazují na pořadové pozice v SELECT seznam. Pro přehlednost můžete hláskovat názvy sloupců:

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

Výsledek je seřazen podle id atd. což může a nemusí být vítané. V každém případě je to lepší než "undefined".

Také to přerušuje vazby (když více let sdílí stejný maximální počet) dobře definovaným způsobem:vyberte nejstarší rok. Pokud je vám to jedno, vynechte year z ORDER BY . Nebo vyberte poslední rok pomocí year DESC .

Pro mnoho řádků na id , ostatní techniky dotazování jsou (mnohem) rychlejší. Viz:



  1. Jak AKTUALIZOVAT tabulku pomocí SUM() a COUNT() ve stejné tabulce do různých sloupců

  2. PHP MySQL generuje jedinečné náhodné číslo

  3. mysql select záznamy delší než 3 měsíce

  4. Upřesnění na rownum