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

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.