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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.