Funkcja countif programu Microsoft Excel zlicza komórki, które spełniają warunek:
Excel: =COUNTIF(<source>, <condition>)
To samo zachowanie można uzyskać w języku SQL, używając wyrażenia case wewnątrz funkcji count:
SQL: COUNT(CASE WHEN <condition> THEN 1 END)
W programie Excel w <źródle> definiuje się arbitralne komórki-Ax:Ay w poniższych przykładach. W SQL wybieranie wierszy jest oddzielone od wybierania kolumn. Klauzule group by i over określają wiersze. Kolumna jest jawnie używana w klauzuli <condition>, która jest umieszczana w wyrażeniu case.
Excel: =COUNTIF(Ax:Ay, 42) SQL: COUNT(CASE WHEN A = 42 THEN 1 END)
Warunek nie jest umieszczany w cudzysłowie – nawet przy użyciu operatora porównania:
Excel: =COUNTIF(Ax:Ay, "> 42") SQL: COUNT(CASE WHEN A > 42 THEN 1 END)
Wartości tekstowe muszą być jednak umieszczane w pojedynczych cudzysłowach0:
Excel: =COUNTIF(Ax:Ay, "Marvin") SQL: COUNT(CASE WHEN A = 'Marvin' THEN 1 END)
To, czy porównania tekstowe SQL ignorują różnice wielkości liter, zależy od tak zwanej kolacji. Nawet wartość domyślna różni się w zależności od produktu bazy danych: MySQL, MariaDB i SQL Server domyślnie wykonują porównania bez rozróżniania wielkości liter. PostgreSQL, baza danych Oracle oraz SQLite domyślnie uwzględniają wielkość liter.
W przeciwieństwie do funkcji Excela countif, SQL nie stosuje dopasowania wieloznacznego podczas porównywania ciągów znaków za pomocą znaku równości (=). Aby używać symboli wieloznacznych w języku SQL, należy użyć operatora like. Operator like używa podkreślenia (_) jako symbolu wieloznacznego dla pojedynczego znaku i znaku procentu (%) jako symbolu wieloznacznego dla dowolnej liczby znaków, jak ? i * w Excelu countif.
Excel: =COUNTIF(Ax:Ay, "Marvin*") SQL: COUNT(CASE WHEN A LIKE 'Marvin%' THEN 1 END)
Countif nad wieloma kolumnami jest wykonywane jako suma jednej count funkcji na 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)
Funkcję Countifs można często zaimplementować z warunkiem and w wyrażeniu case.
Excel: =COUNTIFS(Ax:Ay, 42, Bx:By, 43) SQL: COUNT(CASE WHEN A = 42 AND B = 43 THEN 1 END)
Funkcję counta można również zaimplementować z wyrażeniem case. W tym celu SQL rozróżnia puste ciągi znaków i wartość null. Poniższe wyrażenie zlicza wiersze, które nie mają ani wartości null, ani pustego łańcucha.
SQL: COUNT(CASE WHEN A IS NOT NULL AND A != '' THEN 1 END)
Zauważ, że operator równości SQL (=) nie może być użyty do sprawdzenia wartości null – zamiast niego musisz użyć is null.
Więcej na ten i pokrewne tematy:
-
Wyrażenie SQL
case -
Klauzula
filterw SQL -
Wartość SQL
null -
Excel
sumifw SQL
.