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:
Der
Case-Ausdruck in SQLDie
Filter-Klausel von SQL

