24th Nov 2022 6 Leseminuten Wie man CASE in ORDER BY in SQL verwendet Tihomir Babic CASE WHEN Inhaltsverzeichnis Was ist eine CASE-Anweisung? CASE in SELECT Wird CASE nur in SELECT-Anweisungen verwendet? Wann wird eine CASE-Anweisung in einer ORDER BY-Klausel verwendet? CASE in ORDER BY Andere Verwendungen der CASE-Anweisung Möchten Sie mehr über die CASE-Anweisung erfahren? Dieser Artikel zeigt Ihnen, wie und wann Sie CASE in einer ORDER BY Klausel verwendet. Haben Sie jemals eine CASE Anweisung verwendet? Ich bin sicher, dass Sie das haben, zumindest in einer SELECT-Anweisung. Aber haben Sie sie jemals in einer ORDER BY Klausel verwendet? Nein? Das werden Sie, wenn ich Ihnen zeige, wie! Machen Sie sich keine Sorgen, wenn Sie noch nie eine CASE Anweisung verwendet haben. Ich werde sie Ihnen anhand eines kurzen Beispiels zeigen und erklären. Dann gehe ich auf andere Verwendungen der CASE Anweisung ein, insbesondere in einer ORDER BY Klausel. Wenn Sie mehrere Wissensquellen benötigen, finden Sie hier einen Artikel, der erklärt, was CASE ist. Und hier ist ein weiterer Artikel, in dem erklärt wird, wie Sie CASE verwenden können, um einer SELECT-Anweisung Logik hinzuzufügen. Was ist eine CASE-Anweisung? Vereinfacht ausgedrückt handelt es sich um eine SQL-Anweisung, die Werte entsprechend den angegebenen Bedingungen durchläuft und zurückgibt. Es ist die Art und Weise, wie SQL die Logik von IF-THEN-ELSE schreibt und besteht aus fünf Schlüsselwörtern: CASE, WHEN, THEN, ELSE, und END. Wenn sie in einer SELECT Anweisung verwendet wird, funktioniert sie wie folgt: Wenn die case wenn die Bedingung erfüllt ist, dann einen bestimmten Wert zurückgeben, oder else einen anderen Wert zurückgeben, und end Überprüfung der Bedingungen. Die Syntax sieht wie folgt aus: CASE WHEN THEN , WHEN THEN ELSE END AS Ich denke, diese Syntax lässt sich am besten anhand eines Beispiels erklären. Die grundlegendste Verwendung von CASE ist in einer SELECT Anweisung, also lassen Sie uns mit einem Beispiel beginnen. CASE in SELECT Hier ist die Tabelle films die ich in diesem Beispiel verwenden werde: idfilm_titleyeardirector 1True Grit2010The Coen Brothers 2Da 5 Bloods2020Spike Lee 3Alien1979Ridley Scott 4The Bridges Of Madison County1995Clint Eastwood 5Get Out2017Jordan Peele 6Annie Hall1977Woody Allen 7Goodfellas1990Martin Scorsese 8Dr.Strangelove1964Stanley Kubrick 9You Were Never Really Here2017Lynne Ramsay 10Albert Nobbs2011Rodrigo Garcia Angenommen, wir wollen eine Abfrage schreiben, die neben den Spalten der Tabelle eine zusätzliche Spalte mit dem Jahrhundert anzeigt, in dem der Titel gedreht wurde. Eine Beispielabfrage sieht so aus: SELECT *, CASE WHEN year < 2001 THEN '20th-century film' ELSE '21st-century film' END AS century FROM films; Diese Abfrage wählt alle Spalten der Tabelle aus films. Dann verwendet sie eine CASE-Anweisung, um Werte in eine neue Spalte mit der Bezeichnung Jahrhundert zu schreiben. Diese Anweisung bedeutet: Wenn die Spalte Jahr unter (d. h. älter als) 2001 liegt, sollte der Wert in der Spalte Jahrhundert "Film des 20. Jahrhunderts" sein. Ist dies nicht der Fall, dann sollte der Wert "Film des 21. Schauen wir uns die Ergebnisse der Abfrage an: idfilm_titleyeardirectorcentury 1True Grit2010The Coen Brothers21st-century film 2Da 5 Bloods2020Spike Lee21st-century film 3Alien1979Ridley Scott20th-century film 4The Bridges Of Madison County1995Clint Eastwood20th-century film 5Get Out2017Jordan Peele21st-century film 6Annie Hall1977Woody Allen20th-century film 7Goodfellas1990Martin Scorsese20th-century film 8Dr.Strangelove1964Stanley Kubrick20th-century film 9You Were Never Really Here2017Lynne Ramsay21st-century film 10Albert Nobbs2011Rodrigo Garcia21st-century film Wird CASE nur in SELECT-Anweisungen verwendet? Nein! Obwohl es dort am häufigsten verwendet wird, ist CASE nicht auf SELECT Anweisungen beschränkt. Sie können es zum Beispiel auch in Klauseln wie IN, WHERE, HAVING und ORDER BY verwenden. Die einmalige Verwendung einer CASE -Anweisung in einer Abfrage bedeutet nicht, dass Sie Ihr Kontingent für die Verwendung dieser Anweisung erreicht haben. Sie können sie mehrfach in einer einzigen Abfrage verwenden. Oder Sie können sie nur einmal verwenden. Das bedeutet, dass Sie CASE nicht in SELECT haben müssen, wenn Sie sie nur in einer ORDER BY-Anweisung verwenden möchten. Apropos, in diesem Artikel geht es hauptsächlich darum, Ihnen zu zeigen, wie die Anweisung CASE in einer ORDER BY -Klausel funktioniert. Dazu komme ich jetzt. Wann wird eine CASE-Anweisung in einer ORDER BY-Klausel verwendet? Die ORDER BY Klausel wird verwendet, um das Ergebnis entweder in aufsteigender oder absteigender Reihenfolge zu sortieren. Möchten Sie eine Auffrischung der Funktionsweise? Kein Problem! Dieser Artikel erklärt, was ein ORDER BY tut. Wenn Sie hier eine CASE -Anweisung einfügen, können Sie Ihre ORDER BY verbessern, indem Sie die Ergebnisse nach anderen (und mehreren) Kriterien ordnen. Sie können sie beispielsweise verwenden, wenn Sie Zeichenkettenwerte nach anderen Kriterien als der alphabetischen Reihenfolge sortieren möchten, z. B. nach den hierarchischen Positionen der Stellenbezeichnungen in einem Unternehmen. Mit der Anweisung CASE können Sie Daten auch nach mehreren Kriterien sortieren. So können Sie z. B. Ihre Benutzer nach Land und Name sortieren, aber stattdessen nach Land und Bundesstaat, wenn sie aus den USA kommen. Ich zeige Ihnen ein praktisches Beispiel, und Sie werden sofort wissen, wovon ich spreche. CASE in ORDER BY Hier arbeiten wir mit der Tabelle shopsarbeiten, die die folgenden Daten enthält: idshop_namecountrystatecity 1Zoltan's shopCroatiaNULLZagreb 2Ante PortasCroatiaNULLRijeka 3Green Mile 1USATennesseeMemphis 4Jan Pieter's PitaCroatiaNULLSplit 5Green Mile 2USATennesseeChattanooga 6Green Mile 3USANew OrleansLouisiana 7Krystyna's shopHungaryNULLPecs 8Quinn & SandyHungaryNULLGyor 9Green Mile 4USACaliforniaSan Francisco 10FragolaCroatiaNULLOsijek Wir müssen die Daten zunächst nach country ordnen. Dann sollte jeder Shop innerhalb desselben Landes nach city sortiert werden. Wenn der Shop in den USA liegt, müssen wir ihn als nächstes nach der Spalte state sortieren. Der Code, der dieses kleine Problem löst, lautet: SELECT * FROM shops ORDER BY country, CASE WHEN country = 'USA' THEN state ELSE city END; Es werden alle Spalten der Tabelle ausgewählt shops. Anschließend wird das Ergebnis zuerst nach Land und dann nach den Kriterien in der Anweisung CASE geordnet. Die Anweisung lautet: Wenn country = 'USA', dann wird das Ergebnis nach Bundesland sortiert. Ist dies nicht der Fall, wird es nach city sortiert. Es sieht so aus, als ob dieser Code tatsächlich das gewünschte Ergebnis liefert: idshop_namecountrystatecity 10FragolaCroatiaNULLOsijek 2Ante PortasCroatiaNULLRijeka 4Jan Pieter's PitaCroatiaNULLSplit 1Zoltan's shopCroatiaNULLZagreb 8Quinn & SandyHungaryNULLGyor 7Krystyna's shopHungaryNULLPecs 9Green Mile 4USACaliforniaSan Francisco 6Green Mile 3USANew OrleansLouisiana 5Green Mile 2USATennesseeChattanooga 3Green Mile 1USATennesseeMemphis Andere Verwendungen der CASE-Anweisung Sie können die Anweisung CASE auch mit anderen als den genannten Schlüsselwörtern verwenden. Zum Beispiel können Sie sie mit DESC verwenden. Nehmen wir an, ich füge sie in den obigen Code ein: SELECT * FROM shops ORDER BY country, CASE WHEN country = 'USA' THEN state ELSE city END DESC; Im vorherigen Beispiel habe ich das Schlüsselwort DESC weggelassen. Das Ergebnis wird standardmäßig in aufsteigender Reihenfolge sortiert. Wenn Sie DESC nach der Anweisung CASE schreiben, erhalten Sie die Shops innerhalb der Länder nach city in absteigender Reihenfolge sortiert, nicht in aufsteigender wie im vorherigen Fall. Die Shops in den USA werden nach state geordnet, diesmal aber in absteigender Reihenfolge. Das Ergebnis ist hier zu sehen: idshop_namecountrystatecity 1Zoltan's shopCroatiaNULLZagreb 4Jan Pieter's PitaCroatiaNULLSplit 2Ante PortasCroatiaNULLRijeka 10FragolaCroatiaNULLOsijek 7Krystyna's shopHungaryNULLPecs 8Quinn & SandyHungaryNULLGyor 5Green Mile 2USATennesseeChattanooga 3Green Mile 1USATennesseeMemphis 6Green Mile 3USANew OrleansLouisiana 9Green Mile 4USACaliforniaSan Francisco Sie können auch CASE Anweisungen mit UPDATE, INSERT und DELETE verwenden. Diese werden als datenverändernde Anweisungen bezeichnet. Hier finden Sie einen Artikel, in dem die Verwendung von CASE mit diesen Anweisungen erklärt wird. Sie können es auch für die bedingte Zusammenfassung verwenden. Möchten Sie mehr über die CASE-Anweisung erfahren? Es wird Sie wahrscheinlich überraschen, dass CASE Anweisungen nicht nur in SELECT Anweisungen verwendet werden. Sie haben gesehen, wie nützlich die CASE-Anweisung in Verbindung mit ORDER BY ist. Sie eröffnet die Möglichkeit, Abfrageergebnisse zu ordnen. Das ist aber noch nicht alles. Die Anweisung CASE kann mit einigen anderen Anweisungen und Schlüsselwörtern verwendet werden, z. B. mit Anweisungen zur Änderung von Daten oder auch mit DESC, IN, WHERE und HAVING. Jetzt ist es an der Zeit, mehr zu lernen und das Gelernte zu üben. All das erhalten Sie mit unserem Kurs Standard-SQL-Funktionen . Dieser Kurs ist Teil eines umfassenderen Kurses namens SQL von A bis Z. Worauf warten Sie noch? Tags: CASE WHEN