12th May 2022 8 Leseminuten Wie man CASE WHEN mit SUM() in SQL verwendet Tihomir Babic GROUP BY Aggregatfunktionen CASE WHEN Inhaltsverzeichnis CASE, CASE WHEN, CASE WHEN THEN, oder CASE WHEN THEN ELSE? Wie funktioniert ein CASE WHEN-Ausdruck? Beispiel 1: Der CASE WHEN-Ausdruck Beispiel 2: Der CASE WHEN-Ausdruck mit einem SUM() und einem GROUP BY Beispiel 3: Verwendung eines CASE WHEN-Ausdrucks mit einer SUM()- und einer GROUP BY-Anweisung Sie beginnen, die Möglichkeiten des CASE WHEN-Ausdrucks zu erschließen? In diesem Artikel lernen Sie, was ein CASE WHEN-Ausdruck in SQL ist und wie Sie ihn mit der Funktion SUM() und einer GROUP BY-Anweisung verwenden können. Die beigefügten Beispiele sollen Ihnen das Verständnis erleichtern. Wenn Sie wissen, wie man einen CASE WHEN Ausdruck in SQL verwendet, erhalten Sie einen Einblick in die spannenden Möglichkeiten von SQL. Damit werden Sie von einem einfachen Benutzer, der sich auf die Ergebnisse von SQL verlässt, zu einem Benutzer, der mehr Kontrolle hat und spezifische Kriterien in SQL festlegt. In Kombination mit anderen Funktionen und Anweisungen, wie SUM() und GROUP BY, ist der CASE WHEN Ausdruck ein leistungsstarkes Werkzeug zur Erstellung komplexer SQL-Berichte. Sie können mehr über CASE WHEN und seine Verwendung mit SUM() und GROUP BY in unserem praxisnahen Kurs lernen Erstellen einfacher SQL-Berichte. Für weitere SQL-Übungen besuchen Sie unseren SQL-Praxis Kursblock mit über 500 interaktiven Übungen. CASE, CASE WHEN, CASE WHEN THEN, oder CASE WHEN THEN ELSE? Streng genommen handelt es sich um eine CASE Anweisung in SQL. Manchmal wird sie auch als CASE WHEN Ausdruck oder einer der anderen oben erwähnten Ausdrücke bezeichnet. Lassen Sie sich davon nicht verwirren; es ist alles dasselbe. Die Klauseln WHEN, THEN und ELSE sind alle Teil der Anweisung CASE. Wie funktioniert ein CASE WHEN-Ausdruck? Sie können sich das als SQL-Äquivalent zum IF-THEN-ELSE -Konstrukt vorstellen. Vielleicht sind Sie damit bereits vertraut, insbesondere wenn Sie es in Excel oder einer anderen Programmiersprache verwendet haben. Wie dem auch sei, lassen Sie es uns hier wiederholen. Das IF-THEN-ELSE -Konstrukt funktioniert wie folgt: Die Anweisung IF führt einen logischen Test durch. Sie prüft, ob ein bestimmter Ausdruck wahr oder falsch ist. Wenn der Ausdruck wahr ist, wird ein bestimmter Wert zugewiesen, den Sie angeben; andernfalls wird ein anderer Wert zugewiesen, den Sie ebenfalls angeben. Die Struktur des Ausdrucks CASE WHEN ist die gleiche. Er führt einen logischen Test durch; wenn der Ausdruck wahr ist, dann weist er ihm einen bestimmten Wert zu. Andernfalls wird ein anderer Wert zugewiesen. Ich möchte Ihnen die Logik und die Syntax von CASE WHEN anhand eines Beispiels erläutern. Beispiel 1: Der CASE WHEN-Ausdruck Wir haben eine Tabelle namens test_result, die Testresultate enthält. Die Spalten sind: idDie ID des Schülers. first_name: Der Vorname des Schülers. last_name: Der Nachname des Schülers. score: Das Testergebnis. Die Aufgabe besteht darin, die Kategorien der Testergebnisse entsprechend der Punktzahl zuzuordnen. So wird es gemacht: SELECT first_name, last_name, score, CASE WHEN score > 90 THEN 'Exceptional result' WHEN score > 70 THEN 'Great result' WHEN score > 50 THEN 'Average result' ELSE 'Poor result' END AS score_category FROM test_result ORDER BY score DESC; Die Anweisung SELECT wählt die Vor- und Nachnamen der Schüler und ihre Testergebnisse aus der Tabelle test_result. Nichts Ungewöhnliches. Aber dann beginnt der interessante Teil! Die Anweisung CASE beginnt mit dem Schlüsselwort CASE, natürlich. Danach definiere ich die Bedingungen, die von der Anweisung CASE geprüft werden sollen, und die Werte, die zugewiesen werden sollen. Dazu verwende ich WHEN und THEN. Wenn die Punktzahl beispielsweise über 90 liegt, wird sie als "außergewöhnliches Ergebnis" eingestuft. Liegt sie über 70, handelt es sich um ein "hervorragendes Ergebnis". Sie müssen nicht ausdrücklich "und weniger als 90" angeben. SQL berücksichtigt andere Bedingungen, um doppelte Ergebnisse oder Fehler zu vermeiden. Nach der gleichen Logik wird jede Punktzahl über 50 als "durchschnittliches Ergebnis" betrachtet. Jede Punktzahl, die eine der drei oben genannten Bedingungen nicht erfüllt, wird als "Schlechtes Ergebnis" eingestuft. Denken Sie daran, dass ELSE verwendet wird, um den Wert zuzuweisen, wenn keine der durch CASE und WHEN definierten Bedingungen erfüllt ist. Eine CASE -Anweisung wird durch ein END abgeschlossen. Danach können Sie den Namen der Spalte definieren, in der die Ergebnisse Ihrer CASE -Anweisung gespeichert werden. In diesem Fall ist es die Spalte score_category. Außerdem habe ich die Ergebnisse in absteigender Reihenfolge nach der Spalte score geordnet. Ich bin mir sicher, Sie wollen das Ergebnis sehen: first_namelast_namescorescore_category BenoitShaughnessy95Exceptional result LudvigPert92Exceptional result GizelaShimmings73Great result CapriceKilshall70Average result ColinWhinney40Poor result EtienneMcClaren36Poor result MistiChazelas32Poor result ShurlockeGallaccio29Poor result FreddyBelverstone16Poor result MariannMariot8Poor result Beachten Sie, dass eine ELSE Bedingung in einer CASE Anweisung nicht zwingend erforderlich ist. Versuchen wir, sie wegzulassen. Hier ist der gleiche Code wie oben, aber ohne die ELSE Bedingung: SELECT first_name, last_name, score, CASE WHEN score > 90 THEN 'Exceptional result' WHEN score > 70 THEN 'Great result' WHEN score > 50 THEN 'Average result' END AS score_category FROM test_result ORDER BY score DESC; Führen Sie den Code aus und prüfen Sie das Ergebnis: first_namelast_namescorescore_category BenoitShaughnessy95Exceptional result LudvigPert92Exceptional result GizelaShimmings73Great result CapriceKilshall70Average result ColinWhinney40NULL EtienneMcClaren36NULL MistiChazelas32NULL ShurlockeGallaccio29NULL FreddyBelverstone16NULL MariannMariot8NULL Der Code wurde ohne Fehler ausgeführt, aber das Ergebnis ist anders. Es gibt keine Kategorie "Schlechtes Ergebnis" mehr. Stattdessen gibt es NULL Werte. Denken Sie daran: Wenn die Zeilen keiner der definierten Bedingungen entsprechen, gibt die Anweisung CASE den Wert NULL zurück. Wenn Sie sich eingehender mit der Syntax befassen möchten, könnte dieser sehr ausführliche Artikel über die CASE WHEN Logik äußerst hilfreich sein. Beispiel 2: Der CASE WHEN-Ausdruck mit einem SUM() und einem GROUP BY Jetzt wird's ernst! Ein CASE WHEN -Ausdruck wird oft mit einer SUM()-Funktion in komplexeren Berichten verwendet, was für Anfänger eine ziemliche Herausforderung darstellen kann. Auch wenn Sie wahrscheinlich gewohnt sind, die Funktion SUM() zum Summieren von Werten zu verwenden, kann sie auch zum Zählen eingesetzt werden. Dieses Beispiel wird Ihnen helfen, das Konzept besser zu verstehen. Ich verwende die Tabelle subject, die die folgenden Spalten hat: id: Die ID des Fachs. name: Der Name des Faches. number_of_lectures: Die Anzahl der Vorlesungen während des Jahres. department: Der Fachbereich, in dem das Fach unterrichtet wird. Die Aufgabe besteht darin, die Anzahl der Pflichtfächer und der Wahlfächer nach Fachbereich zu zählen. In diesem Beispiel gilt jedes Fach, das mehr als 20 Vorlesungen im Jahr hat, als Pflichtfach. Wissen Sie, wie Sie diese Aufgabe lösen können? Lassen Sie mich Ihnen helfen: SELECT department, SUM (CASE WHEN number_of_lectures > 20 THEN 1 ELSE 0 END) AS mandatory_subjects, SUM (CASE WHEN number_of_lectures <= 20 THEN 1 ELSE 0 END) AS elective_subjects FROM subject GROUP BY department; Lassen Sie uns den Code analysieren! Zunächst wird die Spalte Abteilung aus der Tabelle subject ausgewählt. Dann kommt die merkwürdige Verwendung eines SUM() mit einem CASE WHEN. Dieser Ausdruck besagt, dass der Zeile der Wert 1 zugewiesen wird, wenn number_of_lectures größer als 20 ist. Wenn die Bedingung nicht erfüllt ist, wird der Zeile der Wert 0 zugewiesen. Die Funktion SUM() summiert alle Zeilen, deren zugewiesener Wert gleich 1 ist. Denken Sie einen Moment nach: Wenn Sie alle "1"en addieren, was erhalten Sie dann? Genau, das ist dasselbe, als wenn Sie die Zeilen zählen würden, deren number_of_lectures über 20 liegt. Die Verwendung eines CASE WHEN -Ausdrucks, um den Tabellenzeilen die Werte 0 oder 1 zuzuweisen, ist nur ein kleiner Trick, damit SUM() die Anzahl der Zeilen genauso zurückgibt wie die Funktion COUNT(). Die Anzahl der Fächer mit mehr als 20 Vorlesungen wird in der Spalte mandatory_subjects angezeigt. Die gleiche Logik gilt für den nächsten CASE WHEN Ausdruck. Der einzige Unterschied besteht darin, dass sich die Bedingung auf 20 oder weniger Vorlesungen bezieht, wobei das Ergebnis in der Spalte elective_subjects angezeigt wird. Schließlich wird das Ergebnis der Abfrage nach der Spalte Abteilung gruppiert. So sieht das Ergebnis dieser Abfrage aus: departmentmandatory_subjectselective_subjects Economics21 Literature20 Philosophy22 Wenn Sie Probleme mit GROUP BY haben, ist dieser Artikel, der die Logik dieses Ausdrucks erklärt, sehr hilfreich. Und wenn Sie auf der Suche nach ein paar schönen Beispielen sind, finden Sie hier einen Artikel mit fünf Beispielen für GROUP BY. Ich möchte Ihnen ein weiteres Beispiel für den Ausdruck CASE WHEN zeigen. Es heißt, Übung macht den Meister. Nun, das ist nicht ganz richtig. Perfektion gibt es nicht! Es macht Sie vielleicht nicht perfekt, aber Übung macht Sie sicher besser beim Schreiben von Code. Beispiel 3: Verwendung eines CASE WHEN-Ausdrucks mit einer SUM()- und einer GROUP BY-Anweisung In diesem letzten Beispiel verwende ich die Tabelle orders. Sie enthält die folgenden Spalten: id: Die ID der Bestellung. total_price: Der Gesamtpreis der Bestellung. order_date: Das Datum der Bestellung. status: Den Status der Bestellung. ship_country: Das Land, in das die Bestellung versandt werden soll. Ihre Aufgabe ist es, die Anzahl der versendeten Bestellungen nach Land anzuzeigen. Die Bestellung ist versandt, wenn ihr Status "shipped" (deutsch "versandt") oder "delivered" (deutsch "geliefert") ist. Mit diesem Code erhalten Sie das gewünschte Ergebnis: SELECT ship_country, SUM(CASE WHEN status = 'shipped' OR status = 'delivered' THEN 1 ELSE 0 END) AS order_shipped FROM orders GROUP BY ship_country; Der Code wählt die Spalte ship_country aus der Tabelle orders aus. Er verwendet dann einen Ausdruck CASE WHEN, um allen Zeilen mit dem Status "shipped" oder "delivered" den Wert 1 zuzuweisen. Allen anderen Status wird der Wert 0 zugewiesen. Die neue Spalte erhält den Namen order_shipped. Schließlich wird das Ergebnis nach der Spalte ship_country gruppiert. Hier ist das Ergebnis: ship_countryorder_shipped Netherlands2 Poland1 Spain4 Wenn Sie daran interessiert sind, die Funktion SUM() auf konventionellere Weise zu verwenden, finden Sie hier einen Artikel, der Ihnen dabei hilft, sie für die bedingte Zusammenfassung zu verwenden. Sie beginnen, die Möglichkeiten des CASE WHEN-Ausdrucks zu erschließen? Ich hoffe, dieser Artikel hat Ihnen geholfen, den Ausdruck CASE WHEN im Allgemeinen zu verstehen, indem er seine Logik erörtert und Ihnen Beispiele für seine Funktionsweise gezeigt hat. Durch die Verwendung des CASE WHEN Ausdrucks entfalten Sie die komplexen Möglichkeiten von SQL. Noch leistungsfähiger wird es, wenn Sie es mit Aggregatfunktionen wie SUM() kombinieren, was ich in zwei Beispielen gezeigt habe. Noch mehr können Sie im Kurs Erstellen einfacher SQL-Berichte lernen. Lesen Sie mehr über den Kurs in einer Folge unserer Serie " Kurs des Monats ". Weitere SQL-Übungen finden Sie in unserer SQL-Praxis. Sie enthält über 500 SQL-Übungen und wir fügen ständig weitere hinzu! Tags: GROUP BY Aggregatfunktionen CASE WHEN