sql >> Databasteknik >  >> RDS >> PostgreSQL

Sorterar nollvärden efter alla andra, utom speciella

Enklare:

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

Hur?

Postgres har en riktig boolean typ (till skillnad från vissa andra RDBMS). Du kan beställa efter den precis som med vilken annan datatyp som helst. Och det kan vara NULL som alla andra datatyper. Standard sorteringsordning är:

FALSE (0)
TRUE (1)
NULL

(sort IS NOT DISTINCT FROM -1) utvärderas till FALSE för alla värden utom -1 - som utvärderar TRUE och sorterar sist. Lägg bara till sort som sekundär ORDER BY objekt.

Motsvarande alternativ:

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

db<>spela här
Gammal sqlfiddle



  1. Avancerad MySql-fråga:Uppdatera tabell med information från en annan tabell

  2. Hur LPAD()-funktionen fungerar i MySQL

  3. EXPORTERA SOM INFOGA UTTALANDE:Men i SQL Plus åsidosätter raden 2500 tecken!

  4. SQL Server trunkering och 8192 begränsning