La funzione countif di Microsoft Excel conta le celle che soddisfano una condizione:
Excel: =COUNTIF(<source>, <condition>)
Lo stesso comportamento può essere ottenuto in SQL usando un’espressione case dentro la funzione count:
SQL: COUNT(CASE WHEN <condition> THEN 1 END)
In Excel, il <source> definisce celle arbitrarie-Ax:Ay negli esempi seguenti. In SQL, il prelievo delle righe è separato dal prelievo delle colonne. Le clausole group by e over specificano le righe. La colonna è esplicitamente usata nel <condition> che è messo nell’espressione case.
Excel: =COUNTIF(Ax:Ay, 42) SQL: COUNT(CASE WHEN A = 42 THEN 1 END)
La condizione non è messa sotto le virgolette – nemmeno quando si usa un operatore di confronto:
Excel: =COUNTIF(Ax:Ay, "> 42") SQL: COUNT(CASE WHEN A > 42 THEN 1 END)
I valori di testo, tuttavia, devono essere messi sotto virgolette singole0:
Excel: =COUNTIF(Ax:Ay, "Marvin") SQL: COUNT(CASE WHEN A = 'Marvin' THEN 1 END)
Se i confronti di testo SQL ignorano o meno le differenze di caso dipende dal cosiddetto collation. Anche l’impostazione predefinita varia tra i prodotti di database: MySQL, MariaDB e SQL Server eseguono confronti case-insensitive per default. PostgreSQL, il database Oracle e SQLite tengono conto delle differenze tra maiuscole e minuscole.
A differenza della funzione countif di Excel, SQL non applica i caratteri jolly quando confronta le stringhe con il segno di uguale (=). Per usare i caratteri jolly in SQL, dovete usare l’operatore like. L’operatore like usa il trattino basso (_) come carattere jolly per un singolo carattere e il segno di percentuale (%) come carattere jolly per qualsiasi numero di caratteri come ? e * in Excels countif.
Excel: =COUNTIF(Ax:Ay, "Marvin*") SQL: COUNT(CASE WHEN A LIKE 'Marvin%' THEN 1 END)
Countif su più colonne è fatto come somma di una funzione count per colonna:
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)
La funzione Countifs può spesso essere implementata con una condizione and nell’espressione case. Per questo, SQL fa una distinzione tra le stringhe vuote e il valore null. La seguente espressione conta le righe che non hanno né il valore null né la stringa vuota.
SQL: COUNT(CASE WHEN A IS NOT NULL AND A != '' THEN 1 END)
Nota che l’operatore SQL equals (=) non può essere usato per controllare il valore nullo – devi invece usare is null.
Più informazioni su questo argomento e argomenti correlati:
-
L’espressione SQL
case -
La clausola
filterin SQL -
Il valore SQL
null -
Excel
sumifin SQL