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
filter
in SQL -
Il valore SQL
null
-
Excel
sumif
in SQL