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