De Microsoft Excel-functie countif telt cellen die aan een voorwaarde voldoen:

Excel: =COUNTIF(<source>, <condition>)

Hetzelfde gedrag kan in SQL worden verkregen door een case expressie binnen de count functie te gebruiken:

 SQL: COUNT(CASE WHEN <condition> THEN 1 END)

In Excel definieert de <source> willekeurige cellen-Ax:Ay in de volgende voorbeelden. In SQL is het kiezen van de rijen gescheiden van het kiezen van de kolommen. De group by en over clausules specificeren de rijen. De kolom wordt expliciet gebruikt in de <condition> die in de case expressie wordt gezet.

Excel: =COUNTIF(Ax:Ay, 42) SQL: COUNT(CASE WHEN A = 42 THEN 1 END)

De voorwaarde wordt niet tussen aanhalingstekens gezet – zelfs niet bij gebruik van een vergelijkingsoperator:

Excel: =COUNTIF(Ax:Ay, "> 42") SQL: COUNT(CASE WHEN A > 42 THEN 1 END)

Tekstwaarden moeten echter tussen enkele aanhalingstekens worden gezet0:

Excel: =COUNTIF(Ax:Ay, "Marvin") SQL: COUNT(CASE WHEN A = 'Marvin' THEN 1 END)

Of SQL-tekstvergelijkingen hoofdletterverschillen al dan niet negeert, hangt af van de zogenaamde collatie. Zelfs de standaard varieert tussen database producten: MySQL, MariaDB en SQL Server voeren standaard case-insensitive vergelijkingen uit. PostgreSQL, de Oracle database en SQLite houden standaard wel rekening met verschillen in hoofd- en kleine letters.

In tegenstelling tot de Excel countif functie, past SQL geen jokertekens toe bij het vergelijken van strings met het gelijkheidsteken (=). Om wildcards te gebruiken in SQL, moet u de like operator gebruiken. De like operator gebruikt de underscore (_) als wildcard voor een enkel teken en het procentteken (%) als wildcard voor een willekeurig aantal tekens, zoals ? en * in Excels countif.

Excel: =COUNTIF(Ax:Ay, "Marvin*") SQL: COUNT(CASE WHEN A LIKE 'Marvin%' THEN 1 END)

Countif over meerdere kolommen wordt gedaan als de som van één count functie per kolom:

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)

De functie Countifs kan vaak worden geïmplementeerd met een and voorwaarde in de case expressie.

Excel: =COUNTIFS(Ax:Ay, 42, Bx:By, 43) SQL: COUNT(CASE WHEN A = 42 AND B = 43 THEN 1 END)

De functie counta kan ook worden geïmplementeerd met een case expressie. Daarvoor maakt SQL een onderscheid tussen lege strings en de null waarde. De volgende expressie telt de rijen die noch de null waarde, noch de lege string hebben.

SQL: COUNT(CASE WHEN A IS NOT NULL AND A != '' THEN 1 END)

Merk op dat de SQL equals operator (=) niet kan worden gebruikt om te controleren op de null waarde-u moet is null in plaats daarvan gebruiken.

Meer over dit en verwante onderwerpen:

  • De SQL case expressie

  • De filter clausule in SQL

  • De SQL null waarde

  • Excel sumif in SQL

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.