Die Microsoft Excel Funktion countif
zählt die Zellen, die eine Bedingung erfüllen:
Excel: =COUNTIF(<source>, <condition>)
Das gleiche Verhalten kann in SQL durch die Verwendung eines case
Ausdrucks innerhalb der count
Funktion erreicht werden:
SQL: COUNT(CASE WHEN <condition> THEN 1 END)
In Excel definiert die <Quelle> beliebige Zellen – in den folgenden Beispielen Ax:Ay. In SQL ist die Auswahl der Zeilen von der Auswahl der Spalten getrennt. Die Klauseln group by
und over
geben die Zeilen an. Die Spalte wird explizit in der <condition>
verwendet, die in den case
-Ausdruck eingefügt wird.
Excel: =COUNTIF(Ax:Ay, 42) SQL: COUNT(CASE WHEN A = 42 THEN 1 END)
Die Bedingung wird nicht in Anführungszeichen gesetzt – auch nicht, wenn ein Vergleichsoperator verwendet wird:
Excel: =COUNTIF(Ax:Ay, "> 42") SQL: COUNT(CASE WHEN A > 42 THEN 1 END)
Textwerte müssen jedoch in einfache Anführungszeichen gesetzt werden0:
Excel: =COUNTIF(Ax:Ay, "Marvin") SQL: COUNT(CASE WHEN A = 'Marvin' THEN 1 END)
Ob SQL-Textvergleiche Groß- und Kleinschreibung ignorieren, hängt von der sogenannten Kollation ab. Selbst die Standardeinstellung variiert zwischen den einzelnen Datenbankprodukten: MySQL, MariaDB und SQL Server führen standardmäßig Vergleiche ohne Berücksichtigung der Groß- und Kleinschreibung durch. PostgreSQL, die Oracle-Datenbank und SQLite berücksichtigen – standardmäßig – Groß- und Kleinschreibung.
Im Gegensatz zur Excel-Funktion countif
wendet SQL beim Vergleich von Zeichenfolgen mit dem Gleichheitszeichen (=
) keine Platzhalter an. Um Platzhalter in SQL zu verwenden, müssen Sie den Operator like
verwenden. Der Operator like
verwendet den Unterstrich (_
) als Platzhalter für ein einzelnes Zeichen und das Prozentzeichen (%
) als Platzhalter für eine beliebige Anzahl von Zeichen wie ?
und *
in Excels countif
.
Excel: =COUNTIF(Ax:Ay, "Marvin*") SQL: COUNT(CASE WHEN A LIKE 'Marvin%' THEN 1 END)
Countif
über mehrere Spalten erfolgt als Summe einer count
Funktion pro Spalte:
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 mit einer and
Bedingung im case
Ausdruck implementiert werden.
Excel: =COUNTIFS(Ax:Ay, 42, Bx:By, 43) SQL: COUNT(CASE WHEN A = 42 AND B = 43 THEN 1 END)
Die Funktion counta
kann ebenfalls mit einem case
Ausdruck implementiert werden. Dabei unterscheidet SQL zwischen leeren Strings und dem null
-Wert. Der folgende Ausdruck zählt die Zeilen, die weder den Wert null
noch die leere Zeichenkette haben.
SQL: COUNT(CASE WHEN A IS NOT NULL AND A != '' THEN 1 END)
Beachten Sie, dass der SQL-Gleichheitsoperator (=
) nicht verwendet werden kann, um auf den Nullwert zu prüfen – Sie müssen stattdessen is null
verwenden.
Mehr zu diesem und verwandten Themen:
-
Der SQL
case
-Ausdruck -
Die
filter
Klausel in SQL -
Der SQL
null
-Wert -
Excel
sumif
in SQL