A função Microsoft Excel countif
conta células que satisfazem uma condição:
Excel: =COUNTIF(<source>, <condition>)
O mesmo comportamento pode ser obtido em SQL usando uma expressão case
dentro da count
função:
SQL: COUNT(CASE WHEN <condition> THEN 1 END)
No Excel, o <source> define células arbitrárias-Ax:Ay nos exemplos a seguir. Em SQL, o picking das linhas é separado do picking das colunas. As cláusulas group by
e over
especificam as linhas. A coluna é explicitamente usada na <condition>
que é colocada na expressão case
.
Excel: =COUNTIF(Ax:Ay, 42) SQL: COUNT(CASE WHEN A = 42 THEN 1 END)
A condição não é colocada sob aspas – nem mesmo quando se usa um operador de comparação:
Excel: =COUNTIF(Ax:Ay, "> 42") SQL: COUNT(CASE WHEN A > 42 THEN 1 END)
Valores de texto, no entanto, devem ser colocados sob aspas simples0:
Excel: =COUNTIF(Ax:Ay, "Marvin") SQL: COUNT(CASE WHEN A = 'Marvin' THEN 1 END)
Se as comparações de texto SQL ignoram ou não as diferenças de maiúsculas e minúsculas depende da chamada colação. Mesmo o padrão varia entre os produtos da base de dados: MySQL, MariaDB e SQL Server realizam por padrão comparações sem distinção entre maiúsculas e minúsculas. PostgreSQL, o banco de dados Oracle e SQLite do-per default – leve em conta as diferenças entre maiúsculas e minúsculas.
Desse modo como a função Excel countif
, SQL não aplica wildcard quando comparando strings com o sinal de igual (=
). Para usar wildcards em SQL, você tem que usar o operador like
. O operador like
usa o sublinhado (_
) como curinga para um único caractere e o sinal de porcentagem (%
) como curinga para qualquer número de caracteres – como ?
e *
em Excels countif
.
Excel: =COUNTIF(Ax:Ay, "Marvin*") SQL: COUNT(CASE WHEN A LIKE 'Marvin%' THEN 1 END)
Countif
em múltiplas colunas é feito como a soma de um count
função por coluna:
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)
A função Countifs
pode frequentemente ser implementada com uma condição and
na expressão case
.
Excel: =COUNTIFS(Ax:Ay, 42, Bx:By, 43) SQL: COUNT(CASE WHEN A = 42 AND B = 43 THEN 1 END)
A função counta
também pode ser implementada com uma expressão case
. Para isso, SQL faz uma distinção entre strings vazias e o valor null
. A seguinte expressão conta as linhas que não têm nem o valor null
nem a string vazia.
SQL: COUNT(CASE WHEN A IS NOT NULL AND A != '' THEN 1 END)
Nota que o SQL igual a operador (=
) não pode ser usado para verificar o valor nulo – você tem que usar is null
em seu lugar.
Mais sobre este e tópicos relacionados:
-
O SQL
case
expressão -
O SQL
filter
cláusula em SQL -
O SQL
null
valor -
Excel
sumif
em SQL