Microsoft Excel-funktionen countif
räknar celler som uppfyller ett villkor:
Excel: =COUNTIF(<source>, <condition>)
Det går att få samma beteende i SQL genom att använda ett case
-uttryck inne i count
-funktionen:
SQL: COUNT(CASE WHEN <condition> THEN 1 END)
I Excel definierar <källan> godtyckliga celler-Ax:Ay i följande exempel. I SQL är urvalet av rader skilt från urvalet av kolumner. Klausulerna group by
och over
anger raderna. Kolumnen används uttryckligen i <condition>
som sätts in i case
-uttrycket.
Excel: =COUNTIF(Ax:Ay, 42) SQL: COUNT(CASE WHEN A = 42 THEN 1 END)
Bestämmelsen sätts inte inom citationstecken – inte ens när man använder en jämförelseoperator:
Excel: =COUNTIF(Ax:Ay, "> 42") SQL: COUNT(CASE WHEN A > 42 THEN 1 END)
Textvärden måste dock sättas inom enkla citationstecken0:
Excel: =COUNTIF(Ax:Ay, "Marvin") SQL: COUNT(CASE WHEN A = 'Marvin' THEN 1 END)
Om SQL:s textjämförelser ignorerar skillnader i stor- och små bokstäver eller inte beror på den s.k. collation. Till och med standardvärdet varierar mellan olika databasprodukter: MySQL, MariaDB och SQL Server utför som standard jämförelser som inte tar hänsyn till stor- och små bokstäver. PostgreSQL, Oracle-databasen och SQLite tar som standard hänsyn till skillnader mellan stor- och små bokstäver.
Till skillnad från Excel-funktionen countif
tillämpar SQL inte wildcardmatchningar när strängar jämförs med likhetstecknet (=
). För att använda jokertecken i SQL måste du använda operatören like
. Operatören like
använder understreck (_
) som jokertecken för ett enda tecken och procenttecknet (%
) som jokertecken för ett valfritt antal tecken – som ?
och *
i Excels countif
.
Excel: =COUNTIF(Ax:Ay, "Marvin*") SQL: COUNT(CASE WHEN A LIKE 'Marvin%' THEN 1 END)
Countif
över flera kolumner görs som summan av en count
funktion per kolumn:
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)
Funktionen Countifs
kan ofta implementeras med ett and
villkor i case
uttrycket.
Excel: =COUNTIFS(Ax:Ay, 42, Bx:By, 43) SQL: COUNT(CASE WHEN A = 42 AND B = 43 THEN 1 END)
Funktionen counta
kan också implementeras med ett case
uttryck. För detta gör SQL skillnad mellan tomma strängar och null
-värdet. Följande uttryck räknar de rader som varken har null
-värdet eller den tomma strängen.
SQL: COUNT(CASE WHEN A IS NOT NULL AND A != '' THEN 1 END)
Bemärk att SQL:s likhetsoperator (=
) inte kan användas för att kontrollera om värdet är noll – du måste använda is null
istället.
Mer om detta och relaterade ämnen:
-
SQL
case
uttrycket -
The
filter
clause in SQL -
The SQL
null
value -
Excel
sumif
i SQL
.