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

.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.