Die Microsoft-Excel-Funktion Countif
zählt die Zellen, für die eine Bedingung erfüllt ist:
Excel: =COUNTIF(<Quelle>, <Bedingung>)
In der Abfragesprache SQL kann man dieses Verhalten durch die Verwendung eines Case
-Ausdrucks in der Count
-Funktion erreichen:
SQL: COUNT(CASE WHEN <Bedingung> THEN 1 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: =COUNTIF(Ax:Ay, 42)
SQL: COUNT(CASE WHEN A = 42 THEN 1 END)
Die Bedingung wird dabei nicht unter Anführungszeichen gesetzt, auch nicht wenn andere Vergleiche verwendet werden:
Excel: =COUNTIF(Ax:Ay, "> 42")
SQL: COUNT(CASE WHEN A > 42 THEN 1 END)
Texte müssen in SQL unter einfache Hochkomma gesetzt werden0:
Excel: =COUNTIF(Ax:Ay, "Marvin")
SQL: COUNT(CASE WHEN A = 'Marvin' THEN 1 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 Countif
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 Countif
.
Excel: =COUNTIF(Ax:Ay, "Marvin*")
SQL: COUNT(CASE WHEN A LIKE 'Marvin%' THEN 1 END)
Countif
über mehrere Spalten wird in SQL durch die Summe einer Count
-Funktion pro Spalte umgesetzt:
Excel: =COUNTIF(Ax:Cy, 42)
SQL: COUNT(CASE WHEN A = 42 THEN 1 END) +
COUNT(CASE WHEN B = 42 THEN 1 END) +
COUNT(CASE WHEN C = 42 THEN 1 END)
Die Funktion Countifs
kann oft durch eine And
-Bedingung im Case
-Ausdruck umgesetzt werden.
Excel: =COUNTIFS(Ax:Ay, 42, Bx:By, 43)
SQL: COUNT(CASE WHEN A = 42 AND B = 43 THEN 1 END)
Die Funktion Counta
wird in SQL ebenfalls mit einem Case
-Ausdruck umgesetzt. SQL unterscheidet dabei zwischen Leerstrings und dem Null
-Wert. Jene Zeilen zu zählen, die weder den Null
-Wert noch den Leerstring enthalten, kann man folgenden Ausdruck verwenden:
SQL: COUNT(CASE WHEN A IS NOT NULL AND A != '' THEN 1 END)
Beachte, dass man in SQL das Ist-gleich-Zeichen nicht nutzen kann, um auf den Null
-Wert zu prüfen – dafür braucht man is [not] null
.
Mehr über die Funktionsweise und weitere Möglichkeiten:
Der
Case
-Ausdruck in SQLDie
Filter
-Klausel von SQLDer SQL
Null
-Wert