Können Sie eine „If“-Anweisung in ORDER BY einschließen?
In SQL wird die ORDER BY-Klausel verwendet, um die Ergebnisse von zu sortieren eine Abfrage in aufsteigender oder absteigender Reihenfolge. Was aber, wenn Sie basierend auf einer Bedingung unterschiedliche Sortierkriterien anwenden möchten?
Die Herausforderung:
Angenommen, Sie haben eine Tabelle mit einer Spalte namens „Typ“. Gibt an, ob ein Datensatz ein „Mitglied“ oder eine „Gruppe“ darstellt. Sie möchten die Ergebnisse nach dem Nachnamen des Mitglieds sortieren, wenn der Typ „Mitglied“ ist, und nach dem Gruppennamen, wenn der Typ „Gruppe“ ist.
Falscher Versuch:
Man könnte zunächst die folgende Abfrage versuchen:
SELECT * FROM table WHERE STATUS = 'Active' ORDER BY ((LNAME if TYPE = 'Member') OR (GROUPNAME if TYPE = 'Group')) ASC
Richtige Lösungen:
Stattdessen gibt es zwei praktikable Ansätze:
1. IF-Funktion:
Mit der IF-Funktion von MySQL können Sie einen Ausdruck bedingt auswerten und einen Wert zurückgeben, wenn die Bedingung wahr ist, und einen anderen Wert, wenn sie falsch ist. So verwenden Sie es in ORDER BY:
ORDER BY IF(TYPE='Member', LNAME, GROUPNAME) ASC
2. CASE-Anweisung:
Die CASE-Anweisung bietet eine flexiblere Möglichkeit, mit mehreren Bedingungen umzugehen. Es wertet die Bedingung aus und gibt für jeden passenden Fall einen bestimmten Wert zurück. Das Ergebnis der CASE-Anweisung wird zum Sortierkriterium:
ORDER BY CASE `type` WHEN 'Member' THEN LNAME WHEN 'Group' THEN GROUPNAME ELSE 1 END ASC
Hinweis:
In der CASE-Anweisung stellt „ELSE 1“ sicher, dass Datensätze ohne Übereinstimmung vorliegen Typwert werden am Ende sortiert.
Das obige ist der detaillierte Inhalt vonKönnen Sie Daten in SQL basierend auf einer Bedingung dynamisch sortieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!