Zurück zur Artikelliste Artikel
6 Leseminuten

Wie man CASE in ORDER BY in SQL verwendet

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?