La fonction countif
de Microsoft Excel compte les cellules qui satisfont à une condition:
Excel: =COUNTIF(<source>, <condition>)
Le même comportement peut être obtenu en SQL en utilisant une expression case
à l’intérieur de la fonction count
:
SQL: COUNT(CASE WHEN <condition> THEN 1 END)
En Excel, la <source> définit des cellules arbitraires-Ax:Ay dans les exemples suivants. En SQL, le prélèvement des lignes est distinct du prélèvement des colonnes. Les clauses group by
et over
spécifient les lignes. La colonne est explicitement utilisée dans la <condition>
qui est mise dans l’expression case
.
Excel: =COUNTIF(Ax:Ay, 42) SQL: COUNT(CASE WHEN A = 42 THEN 1 END)
La condition n’est pas mise entre guillemets – même pas lorsqu’on utilise un opérateur de comparaison:
Excel: =COUNTIF(Ax:Ay, "> 42") SQL: COUNT(CASE WHEN A > 42 THEN 1 END)
Les valeurs de texte, cependant, doivent être mises entre guillemets simples0:
Excel: =COUNTIF(Ax:Ay, "Marvin") SQL: COUNT(CASE WHEN A = 'Marvin' THEN 1 END)
Le fait que les comparaisons de texte SQL ignorent ou non les différences de casse dépend de ce qu’on appelle la collation. Même la valeur par défaut varie selon les produits de base de données : MySQL, MariaDB et SQL Server effectuent des comparaisons insensibles à la casse par défaut. PostgreSQL, la base de données Oracle et SQLite prennent en compte – par défaut – les différences de casse.
Contrairement à la fonction countif
d’Excel, SQL n’applique pas de correspondance avec des caractères génériques lors de la comparaison de chaînes de caractères avec le signe égal (=
). Pour utiliser des caractères génériques en SQL, vous devez utiliser l’opérateur like
. L’opérateur like
utilise le trait de soulignement (_
) comme joker pour un seul caractère et le signe pourcent (%
) comme joker pour un nombre quelconque de caractères, comme ?
et *
dans Excels countif
.
Excel: =COUNTIF(Ax:Ay, "Marvin*") SQL: COUNT(CASE WHEN A LIKE 'Marvin%' THEN 1 END)
Countif
sur plusieurs colonnes se fait comme la somme d’une fonction count
par colonne:
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 fonction Countifs
peut souvent être mise en œuvre avec une condition and
dans l’expression case
.
Excel: =COUNTIFS(Ax:Ay, 42, Bx:By, 43) SQL: COUNT(CASE WHEN A = 42 AND B = 43 THEN 1 END)
La fonction counta
peut également être mise en œuvre avec une expression case
. Pour cela, SQL fait une distinction entre les chaînes vides et la valeur null
. L’expression suivante compte les lignes qui n’ont ni la valeur null
ni la chaîne vide.
SQL: COUNT(CASE WHEN A IS NOT NULL AND A != '' THEN 1 END)
Notez que l’opérateur égal SQL (=
) ne peut pas être utilisé pour vérifier la valeur nulle-vous devez utiliser is null
à la place.
Plus d’informations sur ce sujet et sur des sujets connexes :
-
L’expression SQL
case
-
La
filter
clause en SQL -
La valeur SQL
null
-
Excel
sumif
en SQL
.