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
case
kifejezés -
A
filter
záradék az SQL-ben -
Az SQL
null
érték -
Excel
sumif
az SQL-ben
.