Microsoft Excelin funktio countif laskee solut, jotka täyttävät ehdon:
Excel: =COUNTIF(<source>, <condition>)
Sama käyttäytyminen saadaan SQL:ssä käyttämällä case-lauseketta count-funktion count sisällä:
SQL: COUNT(CASE WHEN <condition> THEN 1 END)
Excelissä <lähde> määrittelee mielivaltaiset solut-Ax:Ay seuraavissa esimerkeissä. SQL:ssä rivien poiminta on erillään sarakkeiden poiminnasta. Lausekkeet group by ja over määrittävät rivit. Saraketta käytetään eksplisiittisesti <condition>, joka laitetaan case-lausekkeeseen.
Excel: =COUNTIF(Ax:Ay, 42) SQL: COUNT(CASE WHEN A = 42 THEN 1 END)
Ehtoa ei laiteta lainausmerkkien alle – ei edes silloin, kun käytetään vertailuoperaattoria:
Excel: =COUNTIF(Ax:Ay, "> 42") SQL: COUNT(CASE WHEN A > 42 THEN 1 END)
Tekstiarvot on kuitenkin laitettava yksinkertaisten lainausmerkkien alle0:
Excel: =COUNTIF(Ax:Ay, "Marvin") SQL: COUNT(CASE WHEN A = 'Marvin' THEN 1 END)
Se, sivuuttavatko SQL:n tekstinvertailut isojen ja pienten kirjainten välisiä eroja,
Excel: =COUNTIF(Ax:Ay, "Marvin") SQL: COUNT(CASE WHEN A = 'Marvin' THEN 1 END)
riippuu niin sanotusta kollokaatiosta. Jopa oletusarvo vaihtelee tietokantatuotteiden välillä: MySQL, MariaDB ja SQL Server suorittavat oletusarvoisesti case-insensitive-vertailut. PostgreSQL, Oracle-tietokanta ja SQLite ottavat – oletusarvoisesti – isojen ja pienten kirjainten erot huomioon.
Toisin kuin Excelin countif-funktio, SQL ei sovella jokerimerkkitapauksia vertaillessaan merkkijonoja yhtäsuuruusmerkillä (=). Jos haluat käyttää jokerimerkkejä SQL:ssä, sinun on käytettävä like-operaattoria. like-operaattori käyttää alleviivaa (_) yhden merkin jokerimerkkinä ja prosenttimerkkiä (%) minkä tahansa merkkimäärän jokerimerkkinä – kuten ? ja * Excelin countif:ssä.
Excel: =COUNTIF(Ax:Ay, "Marvin*") SQL: COUNT(CASE WHEN A LIKE 'Marvin%' THEN 1 END)
Countif usean sarakkeen yli tehdään yhden count-funktion summana saraketta kohti:
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)
Funktio Countifs voidaan usein toteuttaa and-ehdolla case-lausekkeessa.
Excel: =COUNTIFS(Ax:Ay, 42, Bx:By, 43) SQL: COUNT(CASE WHEN A = 42 AND B = 43 THEN 1 END)
Funktio counta voidaan toteuttaa myös case-lausekkeessa. Sitä varten SQL tekee eron tyhjien merkkijonojen ja null-arvon välillä. Seuraava lauseke laskee ne rivit, joilla ei ole null-arvoa eikä tyhjää merkkijonoa.
SQL: COUNT(CASE WHEN A IS NOT NULL AND A != '' THEN 1 END)
Huomaa, että SQL:n yhtäsuuruusoperaattoria (=) ei voi käyttää nolla-arvon tarkistamiseen – sen sijaan on käytettävä is null.
Lisätietoa tästä ja siihen liittyvistä aiheista:
-
SQL
case-lauseke -
filter-lauseke SQL:ssä -
SQL:n
null-arvo -
Excelin
sumif-arvo SQL:ssä
.