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
caseuttrycket -
The
filterclause in SQL -
The SQL
nullvalue -
Excel
sumifi SQL
.