Excels Sumif in SQL


Die Microsoft-Excel-Funktion Sumif summiert die Zellen, für die eine Bedingung erfüllt ist:

Excel: =SUMIF(<Quelle>, <Bedingung>)

In der Abfragesprache SQL kann man dieses Verhalten durch die Verwendung eines Case-Ausdrucks in der Sum-Funktion erreichen:

  SQL: SUM(CASE WHEN <Bedingung> THEN <Wert> END)

Während man bei Excel in der <Quelle> beliebige Zellen auswählt – im folgenden Beispiel Ax:Ay – , erfolgt bei SQL die Auswahl der Zeilen und Spalten getrennt. Die Zeilen werden durch die Group-By- und Over-Klauseln festgelegt. Die Spalte muss in der <Bedingung> im Case-Ausdruck explizit verwendet werden.

Excel: =SUMIF(Ax:Ay, 42)
  SQL: SUM(CASE WHEN A = 42 THEN A END)

Die Bedingung wird dabei nicht unter Anführungszeichen gesetzt, auch nicht wenn andere Vergleiche verwendet werden:

Excel: =SUMIF(Ax:Ay, "> 42")
  SQL: SUM(CASE WHEN A > 42 THEN A END)

Beim Case-Ausdruck können in den When- und Then-Zweigen unterschiedliche Werte verwendet werden. Damit lässt sich auch die Sumif-Funktion mit drei Argumenten umsetzen:

Excel: =SUMIF(Ax:Ay, "> 42", Bx:By)
  SQL: SUM(CASE WHEN A > 42 THEN B END)

Texte müssen in SQL unter einfache Hochkomma gesetzt werden0:

Excel: =SUMIF(Ax:Ay, "Marvin", Bx:By)
  SQL: SUM(CASE WHEN A = 'Marvin' THEN B END)

Ob ein Textvergleich die Groß- und Kleinschreibung unterscheidet oder nicht hängt von der sogenannten Collation ab. Hier unterscheiden sich auch die Voreinstellungen: MySQL, MariaDB und SQL Server unterscheiden mit den Voreinstellungen nicht zwischen Groß- und Kleinbuchstaben. Bei PostgreSQL, der Oracle Datenbank und SQLite wird standardmäßig zwischen Groß- und Kleinbuchstaben unterschieden.

Anders als die Excel-Funktion Sumif wendet SQL bei Textvergleichen mit dem Ist-gleich-Zeichen (=) keine Wildcard-Zeichen an. Um in SQL Wildcard-Zeichen zu verwenden, kann man den Like-Operator verwenden. Dabei dient der Unterstrich (_) als Platzhalter für ein Zeichen und das Prozentzeichen (%) als Platzhalter für beliebig viele Zeichen – entsprechend ? und * bei Excel Sumif.

Excel: =SUMIFIF(Ax:Ay, "Marvin*", Bx:By)
  SQL: suM(CASE WHEN A LIKE 'Marvin%' THEN B END)

Sumif über mehrere Spalten wird in SQL durch die Summe einer Sum-Funktion pro Spalte umgesetzt:

Excel: =SUMIF(Ax:Cy, 42)
  SQL: SUM(CASE WHEN A = 42 THEN A END) +
       SUM(CASE WHEN B = 42 THEN B END) +
       SUM(CASE WHEN C = 42 THEN C END)

Die Funktion Sumifs kann oft durch eine And-Bedingung im Case-Ausdruck umgesetzt werden.

Excel: =SUMIFS(Bx:By, Ax:Ay, 42, Cx:Cy, 43)
  SQL: COUNT(CASE WHEN A = 42 AND C = 43 THEN B END)

Mehr über die Funktionsweise und weitere Möglichkeiten:

20 Jahre SQL-Evolution kann man nicht an einem Tag nachholen. Abonniere den Newsletter via E-Mail, Twitter oder RSS um sukzessive aufzuholen und modern-sql.com am Radar zu behalten.

Über den Autor

Foto von Markus Winand

Markus Winand gibt auf modern-sql.com Einblick in SQL und zeigt, wie es von verschiedenen Systemen unterstützt wird. Zuvor machte er use-the-index-luke.com, was er noch immer wartet. Markus kann als Trainer, Sprecher und Berater auf winand.at engagiert werden.

Sein Buch kaufen

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Jetzt Kaufen
(Taschenbuch und/oder PDF)

Sein Training

Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how

Erfahren Sie mehr»

Fußnoten

  1. Je nach Konfiguration verwenden manche Datenbanken stattdessen Anführungszeichen (MySQL, MariaDB).

Mit Markus Winand verbinden

Markus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf Twitter
„modern SQL“ von Markus Winand ist unter einer Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License lizenziert.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz und DSGVO | CC-BY-NC-ND 3.0 Lizenz