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
filter
w SQL -
Wartość SQL
null
-
Excel
sumif
w SQL
.