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

Postgres:Odlišné, ale pouze pro jeden sloupec

Chcete-li provést rozlišení pouze na jednom (nebo n) sloupcích:

select distinct on (name)
    name, col1, col2
from names

Tím se vrátí kterýkoli z řádků obsahujících název. Pokud chcete ovládat, který z řádků bude vrácen, musíte si objednat:

select distinct on (name)
    name, col1, col2
from names
order by name, col1

Při objednání podle col1 vrátí první řadu.

distinct on :

SELECT DISTINCT ON ( výraz [, ...] ) zachová pouze první řádek každé sady řádků, kde jsou dané výrazy vyhodnoceny jako stejné. Výrazy DISTINCT ON jsou interpretovány pomocí stejných pravidel jako pro ORDER BY (viz výše). Všimněte si, že „první řádek“ každé sady je nepředvídatelný, pokud není použito ORDER BY k zajištění toho, že se požadovaný řádek objeví jako první.

Výraz(y) DISTINCT ON se musí shodovat s výrazem(y) ORDER BY zcela vlevo. Klauzule ORDER BY bude normálně obsahovat další výraz(y), které určují požadovanou prioritu řádků v každé skupině DISTINCT ON.



  1. Úvod do zabezpečení na úrovni řádků v SQL Server

  2. MyBatis RowBounds neomezuje výsledky dotazů

  3. Fluent NHibernate a PostgreSQL, SchemaMetadataUpdater.QuoteTableAndColumns - System.NotSupportedException:Zadaná metoda není podporována

  4. PostgreSql INSERT FROM SELECT VRACOVACÍ ID