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

Jak vybrat ID s maximální skupinou data podle kategorie v PostgreSQL?

Toto je perfektní případ použití pro DISTINCT ON - Postgres specifické rozšíření standardu DISTINCT :

SELECT DISTINCT ON (category)
       id  -- , category, date  -- any other column (expression) from the same row
FROM   tbl
ORDER  BY category, date DESC;

Pozor na sestupné řazení. Pokud sloupec může mít hodnotu NULL, možná budete chtít přidat NULLS LAST :

  • Seřadit podle sloupce ASC, ale nejprve hodnoty NULL?

DISTINCT ON je jednoduchý a rychlý. Podrobné vysvětlení v této související odpovědi:

  • Vybrat první řádek v každé skupině GROUP BY?

Pro velké tabulky s mnoha řádky na category zvažte alternativní přístup:

  • Optimalizujte dotaz GROUP BY pro načtení posledního řádku na uživatele
  • Optimalizujte maximální počet dotazů ve skupině


  1. Jak vrátit seznam dostupných kolace v PostgreSQL

  2. Vkládání dat SQL Server pomocí Oracle® SQL*Loader

  3. Reference:Jaký je dokonalý příklad kódu pomocí rozšíření MySQL?

  4. Omezení křížových tabulek v PostgreSQL