mysql order by, null first und DESC after


78

Wie kann ich DESC nach einem Feld bestellen, aber zuerst die NULL-Werte auflisten?

Also habe ich einen Tisch:

reuestId | offerId | offerTitle
1        | 1       | Alfa
NULL     | 2       | Beta
2        | 3       | Gamma

Ich möchte sie so auswählen, dass die Ergebnisse sind:

NULL | 2 | Beta
2    | 3 | Gamma
1    | 1 | Alfa

Antworten:


155

Versuche dies:

ORDER BY [reuestId] IS NULL DESC, [reuestId] DESC

sollte funktionieren (für mySql)


Oder Unterabfrage zur Kategorie

30
SELECT *
FROM TableX
ORDER BY (requestId IS NOT NULL)
       , requestId DESC

Ich denke, diese Antwort ist das Gegenteil von der ersten?
xi.lin

4
@ xi.lin: Nein, der erste setzt IS NULL (was im Wesentlichen eine Funktion ist, die eine 1 oder eine 0 zurückgibt) in DESC-Reihenfolge, dieser setzt IS NOT NULLin aufsteigender Reihenfolge. Sie sind gleichwertig.
BlueRaja - Danny Pflughoeft

@ BlueRaja-DannyPflughoeft Danke für die Erklärung! Ich dachte nur fälschlicherweise, IS NULL sei ein Filter anstelle einer Funktion.
xi.lin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.