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
caseexpressão -
O SQL
filtercláusula em SQL -
O SQL
nullvalor -
Excel
sumifem SQL