A Microsoft Excel countif függvénye megszámolja a feltételnek megfelelő cellákat:
Excel: =COUNTIF(<source>, <condition>)
Az SQL-ben ugyanez a viselkedés érhető el egy case kifejezés használatával a count függvényen belül:
SQL: COUNT(CASE WHEN <condition> THEN 1 END)
Az Excelben a <forrás> tetszőleges cellákat határoz meg-Ax:Ay a következő példákban. Az SQL-ben a sorok szedése elkülönül az oszlopok szedésétől. A group by és over záradékok határozzák meg a sorokat. Az oszlopot kifejezetten a <condition>-ban használjuk, amely a case kifejezésbe kerül.
Excel: =COUNTIF(Ax:Ay, 42) SQL: COUNT(CASE WHEN A = 42 THEN 1 END)
A feltétel nem kerül idézőjelek alá – még összehasonlító operátor használatakor sem:
Excel: =COUNTIF(Ax:Ay, "> 42") SQL: COUNT(CASE WHEN A > 42 THEN 1 END)
A szöveges értékeket azonban szimpla idézőjelek alá kell tenni0:
Excel: =COUNTIF(Ax:Ay, "Marvin") SQL: COUNT(CASE WHEN A = 'Marvin' THEN 1 END)
Az, hogy az SQL szöveges összehasonlítások figyelmen kívül hagyják-e a nagybetűs különbségeket, az úgynevezett kollációtól függ. Még az alapértelmezett is változik az egyes adatbázis-termékek között: A MySQL, a MariaDB és az SQL Server alapértelmezés szerint a case-insensitive összehasonlításokat végzi. A PostgreSQL, az Oracle adatbázis és az SQLite – alapértelmezés szerint – figyelembe veszi az esetek közötti különbségeket.
Az Excel countif függvényétől eltérően az SQL nem alkalmazza a wildcard egyezéseket az egyenlőségjelet (=) tartalmazó karakterláncok összehasonlításakor. Az SQL-ben a jokerek használatához a like operátort kell használni. A like operátor az aláhúzást (_) használja jokerként egyetlen karakterre, a százalékjelet (%) pedig tetszőleges számú karakterre – mint az Excels countif-ben ? és * -.
Excel: =COUNTIF(Ax:Ay, "Marvin*") SQL: COUNT(CASE WHEN A LIKE 'Marvin%' THEN 1 END)
Countif több oszlopon keresztül egy count függvény összegeként történik oszloponként:
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)
A Countifs függvény gyakran a case kifejezésben lévő and feltétellel is megvalósítható.
Excel: =COUNTIFS(Ax:Ay, 42, Bx:By, 43) SQL: COUNT(CASE WHEN A = 42 AND B = 43 THEN 1 END)
A counta függvény szintén megvalósítható case kifejezéssel. Ehhez az SQL különbséget tesz az üres karakterláncok és a null érték között. A következő kifejezés megszámolja azokat a sorokat, amelyek sem a null értékkel, sem az üres karakterlánccal nem rendelkeznek.
SQL: COUNT(CASE WHEN A IS NOT NULL AND A != '' THEN 1 END)
Megjegyezzük, hogy az SQL egyenlőségi operátora (=) nem használható a null érték ellenőrzésére – helyette a is null kifejezést kell használni.
Tovább erről és a kapcsolódó témákról:
-
Az SQL
casekifejezés -
A
filterzáradék az SQL-ben -
Az SQL
nullérték -
Excel
sumifaz SQL-ben
.