8 Stimmen

Zuerst nach Null, dann nach anderen Variablen sortieren

Dies ist mein vorläufiger Code:

SELECT id, number
FROM Media
WHERE user = 10
ORDER BY id, number

aber ich möchte, dass es so aussieht:

SELECT id, number
FROM Media
WHERE user = 10
ORDER BY while(number IS NULL), id

Ich möchte, dass alle number die sind NULL an der Spitze des Ergebnisses, aber sobald number ist nicht NULL , sortieren nach id

Ist das möglich?

Ich verwende mysql.

20voto

Pascal MARTIN Punkte 384469

Wie wäre es mit etwas wie diesem?

SELECT id, number
FROM Media
WHERE user = 10
ORDER BY (case when number is null then 0 else 1 end), id

Wenn number NULL ist, ist das erste Ordnungskriterium 0 ; sonst 1
Das bedeutet, dass jede Zeile die Nummer NULL hat und vor den anderen Zeilen steht.

Und beachten Sie, dass die IDs sowieso sortiert werden.

Sie erhalten etwa die folgende Meldung:

  • Zahl null ; id=1
  • Zahl null ; id=2
  • Zahl null ; id=5
  • Zahl null ; id=8
  • Zahl nicht null ; id=3
  • Zahl nicht null ; id=4
  • Zahl nicht null ; id=7
  • Zahl nicht null ; id=10
  • Zahl nicht null ; id=12

0 Stimmen

So mache ich es normalerweise auch.

0 Stimmen

Ausgezeichnet! Schnelle Antwort, und es hat auf Anhieb funktioniert. Ich danke Ihnen!

1voto

Jim Soho Punkte 1970

Die Funktion ISNULL() gibt 1 zurück, wenn der Parameter null ist, und sonst 0.

SELECT id, number
FROM Media
WHERE user = 10
ORDER BY ISNULL(number) DESC, id

Wohlgemerkt, schrecklich für die Leistung je nachdem, wie viele Werte es braucht, um zu bestellen: kein Index wird auf der Grundlage der ORDER BY Spalten verwendet werden.

-1voto

txyoji Punkte 6490

Auch die Union könnte verwendet werden.

SELECT id, number
FROM Media
WHERE user = 10 AND number IS NULL
ORDER BY id

UNION

SELECT id, number
FROM Media
WHERE user = 10 AND number IS NOT NULL
ORDER BY id, number;

0 Stimmen

Abgesehen von einer leicht falschen Syntax (fehlende Klammern) macht dies keinen Sinn, da die UNION garantiert nicht die Beibehaltung der Reihenfolge der einzelnen Auswahlen. Außerdem führt dies zu einem unnötig teuren Ausführungsplan (zwei NULL Kontrollen der number Spalte).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X