sql >> Database >  >> RDS >> PostgreSQL

Null-waarden sorteren na alle andere, behalve speciaal

Eenvoudiger:

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

Hoe?

Postgres heeft een juiste boolean type (in tegenstelling tot sommige andere RDBMS). U kunt er op bestellen net als bij elk ander gegevenstype. En het kan NULL zijn zoals elk ander gegevenstype. Standaard sorteervolgorde is:

FALSE (0)
TRUE (1)
NULL

(sort IS NOT DISTINCT FROM -1) evalueert tot FALSE voor alle waarden behalve -1 - die TRUE . evalueert en sorteert als laatste. Voeg gewoon sort toe als secundaire ORDER BY artikel.

Gelijkwaardig alternatief:

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

db<>viool hier
Oude sqlfiddle



  1. Fix Msg 8116 "Argumentgegevenstype varchar is ongeldig voor argument 1 van session_context-functie" in SQL Server

  2. Het SNAPSHOT-isolatieniveau

  3. Hoe wijzig ik een MySQL-kolom om NULL toe te staan?

  4. PDOException SQLSTATE [HY000] [2002] Geen dergelijk bestand of map