Heim >Datenbank >MySQL-Tutorial >Wie sortiere ich Nicht-Null-Werte aufsteigend, dann Nullen, mit -1-Werten zuletzt in PostgreSQL?

Wie sortiere ich Nicht-Null-Werte aufsteigend, dann Nullen, mit -1-Werten zuletzt in PostgreSQL?

Linda Hamilton
Linda HamiltonOriginal
2025-01-03 08:07:38633Durchsuche

How to Sort Non-Null Values Ascending, then Nulls, with -1 Values Last in PostgreSQL?

Nullwerte auf besondere Weise nach Nicht-Nullwerten sortieren

Hintergrund

In einer PostgreSQL-Tabelle mit einem optionalen Sortierfeld ist das Ziel um Werte wie folgt zu sortieren:

  • Nicht-Null-Werte sollten an erster Stelle stehen und in aufsteigender Reihenfolge basierend auf sortiert werden ihre Sortierwerte.
  • NULL-Werte sollten nach Nicht-Null-Werten stehen.
  • Ausnahmsweise sollten Sortierwerte von -1 nach allen anderen Nicht-Null-Werten erscheinen.

Lösung

Um dieses Sortierverhalten zu erreichen, besteht ein Ansatz darin, das folgende ORDER BY zu verwenden Klausel:

ORDER BY (sort IS NOT DISTINCT FROM -1), sort

Erklärung

Diese Klausel funktioniert wie folgt:

  • (Sortierung UNTERSCHEIDET SICH NICHT VON -1) ergibt für alle Werte außer - FALSE. 1, was als WAHR ausgewertet wird.
  • Der Ausdruck ist in aufsteigender Reihenfolge sortiert, d. h. FALSE-Werte (Nicht-Null-Werte, andere). als -1) stehen vor TRUE-Werten (-1).
  • Die sekundäre ORDER BY-Klausel sortiert dann nach dem Sortierwert und stellt so sicher, dass Nicht-Null-Werte innerhalb ihrer jeweiligen Gruppen in aufsteigender Reihenfolge sortiert werden.

Beispiel

Betrachten Sie die bereitgestellten 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 NULL
6 1 epsilon NULL

Unter Verwendung der bereitgestellten Klausel wird die Elemente würden wie folgt sortiert:

alpha, beta, gamma, delta, epsilon, zeta

Alternative Formen

Eine äquivalente Alternative zum Anfangssatz ist:

ORDER BY (sort IS DISTINCT FROM -1) DESC, sort

Dieser Satz erzeugt das gleiche Sortierverhalten, jedoch verwendet das Schlüsselwort DESC, um den Ausdruck (sort IS DISTINCT FROM -1) in absteigender Reihenfolge zu sortieren.

Das obige ist der detaillierte Inhalt vonWie sortiere ich Nicht-Null-Werte aufsteigend, dann Nullen, mit -1-Werten zuletzt in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn