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 filter clause in SQL

  • The SQL null value

  • Excel sumif i SQL

.

Lämna ett svar

Din e-postadress kommer inte publiceras.