Sortieren von Werten mit Sonderfällen in PostgreSQL
Diese Diskussion dreht sich um das Ordnen von Daten aus einer PostgreSQL-Tabelle namens „Aufgaben“. Jede Aufgabe verfügt über ein optionales Feld namens „Sortieren“. Das Ziel besteht darin, Sortieraufgaben ohne „Sortier“-Werte nach allen anderen zu priorisieren, mit Ausnahme derjenigen mit „-1“ als Sortierwert, die nach allen anderen erscheinen sollten.
Beachten Sie die folgenden Beispieldaten:
id | f_id | name | sort |
---|---|---|---|
1 | 1 | zeta | -1 |
2 | 1 | alpha | 1 |
3 | 1 | gamma | 3 |
4 | 1 | beta | 2 |
5 | 1 | delta | |
6 | 1 | epsilon |
Die alleinige Verwendung von COALESCE(sort,99999) gruppiert Nullwerte nach Nicht-Nullwerten, behandelt jedoch nicht den Sonderfall von „-1.“
Die Lösung nutzt den booleschen Datentyp von PostgreSQL, um die gewünschte Sortierreihenfolge zu erreichen:
SELECT * FROM tasks ORDER BY (sort IS NOT DISTINCT FROM -1), sort;
Diese Abfrage macht sich die Tatsache zunutze, dass der Vergleich „(sort IS NOT DISTINCT FROM -1)“ wird für alle Werte als FALSE ausgewertet, mit Ausnahme von „-1“, das selbst als TRUE ausgewertet wird. Wenn Sie zuerst nach diesem Ausdruck sortieren, werden die „-1“-Werte unabhängig von ihren Sortierwerten am Ende der Reihenfolge platziert.
Ein alternativer Ansatz unter Verwendung des DESC-Schlüsselworts wird ebenfalls vorgestellt:
SELECT * FROM tasks ORDER BY (sort IS DISTINCT FROM -1) DESC, sort;
Beide Methoden sortieren Aufgaben effektiv ohne „Sortier“-Werte nach allen anderen und stellen gleichzeitig sicher, dass „-1“-Werte nach allen anderen Sortierwerten ungleich Null erscheinen.
Das obige ist der detaillierte Inhalt vonWie sortiere ich PostgreSQL-Daten mit Nullen und einem Sonderfallwert (-1)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!