Excels Countif


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:

20 Jahre SQL-Evolution kann man nicht an einem Tag nachholen. Abonniere den Newsletter via E-Mail, Bluesky 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).

Neuigkeiten Abonnieren

Markus Winands MailinglistenMarkus Winands RSS-FeedMarkus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf TwitterMarkus Winand auf Bluesky
Copyright 2015-2025 Markus Winand. Alle Rechte vorbehalten.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz und DSGVO