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

Řazení hodnot null po všech ostatních, kromě speciálních

Jednodušší:

SELECT *
FROM   tasks
ORDER  BY (sort IS NOT DISTINCT FROM -1), sort;

Jak?

Postgres má správný boolean typu (na rozdíl od některých jiných RDBMS). Můžete podle něj objednávat stejně jako podle jakéhokoli jiného datového typu. A může být NULL jako jakýkoli jiný datový typ. Výchozí pořadí řazení je:

FALSE (0)
TRUE (1)
NULL

(sort IS NOT DISTINCT FROM -1) vyhodnotí jako FALSE pro všechny hodnoty kromě -1 - který vyhodnotí TRUE a řadí jako poslední. Stačí přidat sort jako sekundární ORDER BY položka.

Ekvivalentní alternativa:

SELECT *
FROM   tasks
ORDER  BY (sort IS DISTINCT FROM -1) DESC, sort;

db<>zde hrajte
Starý sqlfiddle



  1. Jak změnit symbol měny relace v Oracle

  2. Najděte referenční entity na serveru SQL:sys.dm_sql_referenced_entities

  3. Co jsou zámky řádků, stránek a tabulek? A kdy jsou pořízeny?

  4. Postgresql extrahuje poslední řádek pro každé ID