La función de Microsoft Excel countif
cuenta las celdas que satisfacen una condición:
Excel: =COUNTIF(<source>, <condition>)
El mismo comportamiento se puede obtener en SQL utilizando una expresión case
dentro de la función count
:
SQL: COUNT(CASE WHEN <condition> THEN 1 END)
En Excel, la <fuente> define celdas arbitrarias-Ax:Ay en los siguientes ejemplos. En SQL, la selección de las filas es independiente de la selección de las columnas. Las cláusulas group by
y over
especifican las filas. La columna se utiliza explícitamente en el <condition>
que se pone en la expresión case
.
Excel: =COUNTIF(Ax:Ay, 42) SQL: COUNT(CASE WHEN A = 42 THEN 1 END)
La condición no se pone entre comillas-ni siquiera cuando se utiliza un operador de comparación:
Excel: =COUNTIF(Ax:Ay, "> 42") SQL: COUNT(CASE WHEN A > 42 THEN 1 END)
Los valores de texto, sin embargo, deben ponerse entre comillas simples0:
Excel: =COUNTIF(Ax:Ay, "Marvin") SQL: COUNT(CASE WHEN A = 'Marvin' THEN 1 END)
Si las comparaciones de texto de SQL ignoran o no las diferencias entre mayúsculas y minúsculas depende de la llamada colación. Incluso el valor por defecto varía entre los productos de bases de datos: MySQL, MariaDB y SQL Server realizan comparaciones que no distinguen entre mayúsculas y minúsculas por defecto. PostgreSQL, la base de datos Oracle y SQLite sí tienen en cuenta -por defecto- las diferencias entre mayúsculas y minúsculas.
A diferencia de la función countif
de Excel, SQL no aplica coincidencias con comodines al comparar cadenas con el signo de igual (=
). Para utilizar comodines en SQL, hay que utilizar el operador like
. El operador like
utiliza el guión bajo (_
) como comodín para un solo carácter y el signo de porcentaje (%
) como comodín para cualquier número de caracteres, como ?
y *
en Excels countif
.
Excel: =COUNTIF(Ax:Ay, "Marvin*") SQL: COUNT(CASE WHEN A LIKE 'Marvin%' THEN 1 END)
Countif
sobre múltiples columnas se realiza como la suma de una función count
por columna:
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 función Countifs
puede implementarse a menudo con una condición and
en la expresión case
.
Excel: =COUNTIFS(Ax:Ay, 42, Bx:By, 43) SQL: COUNT(CASE WHEN A = 42 AND B = 43 THEN 1 END)
La función counta
puede implementarse también con una expresión case
. Para ello, SQL hace una distinción entre las cadenas vacías y el valor null
. La siguiente expresión cuenta las filas que no tienen ni el valor null
ni la cadena vacía.
SQL: COUNT(CASE WHEN A IS NOT NULL AND A != '' THEN 1 END)
Tenga en cuenta que el operador SQL igual (=
) no se puede utilizar para comprobar el valor nulo-tiene que utilizar is null
en su lugar.
Más información sobre este tema y otros relacionados:
-
La expresión SQL
case
-
La cláusula
filter
en SQL -
El valor SQL
null
-
Excel
sumif
en SQL