Como Contar Dados Usando COUNT e CASE em SQL

Ao combinar a função SQL COUNT com instruções CASE, você pode contar dados de forma eficiente com base em condições específicas. Isso permite uma agregação mais flexível do que uma simples contagem. Neste artigo, vamos entender os fundamentos da função COUNT e das instruções CASE, e aprender a usá-las por meio de exemplos específicos de consultas SQL.

Índice

Fundamentos da Função COUNT

A função COUNT é usada em SQL para contar o número de linhas em um banco de dados. Você pode usá-la para obter o número total de linhas ou o número de linhas onde uma coluna específica tem um valor.

Contando Todas as Linhas

Para contar todas as linhas em uma tabela, use COUNT(*) da seguinte forma:

SELECT COUNT(*) FROM table_name;

Contando Valores em uma Coluna Específica

Para contar linhas onde uma coluna específica tem um valor, use COUNT(column_name). Valores NULL não são contados.

SELECT COUNT(column_name) FROM table_name;

Fundamentos da Instrução CASE

A instrução CASE é uma expressão condicional usada em SQL para retornar valores diferentes com base em condições especificadas. Tem uma sintaxe semelhante às instruções IF-THEN-ELSE, permitindo retornar valores específicos quando certas condições são atendidas e valores diferentes caso contrário.

Sintaxe da Instrução CASE

A sintaxe básica da instrução CASE é a seguinte:

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE resultN
END

Cada condição é avaliada em sequência, e o resultado da primeira condição verdadeira é retornado. Se todas as condições forem falsas, a parte ELSE do resultado é retornada. Se o ELSE for omitido, NULL é retornado se todas as condições forem falsas.

Exemplo Simples

Por exemplo, para avaliar os salários dos funcionários e atribuir classificações com base em faixas específicas, use a instrução CASE da seguinte forma:

SELECT name,
       CASE
           WHEN salary >= 100000 THEN 'High'
           WHEN salary >= 50000 THEN 'Medium'
           ELSE 'Low'
       END AS salary_rating
FROM employees;

Neste exemplo, um salário de 100000 ou mais retorna “High”, 50000 ou mais retorna “Medium” e qualquer valor abaixo retorna “Low”.

Combinando Instruções COUNT e CASE

Ao combinar a função COUNT com instruções CASE, você pode contar dados com base em condições específicas. Isso permite avaliar e agregar múltiplas condições em uma única consulta.

Sintaxe Básica para Contagem Condicional

A sintaxe básica para combinar a função COUNT com instruções CASE é a seguinte:

SELECT
    COUNT(CASE WHEN condition1 THEN 1 END) AS count_condition1,
    COUNT(CASE WHEN condition2 THEN 1 END) AS count_condition2
FROM table_name;

Esta sintaxe conta o número de linhas que atendem a cada condição. A instrução CASE retorna 1 quando verdadeira, e a função COUNT conta essas ocorrências.

Exemplo Específico

Por exemplo, para contar o número de clientes masculinos e femininos em uma tabela de clientes, use a seguinte consulta:

SELECT
    COUNT(CASE WHEN gender = 'Male' THEN 1 END) AS male_count,
    COUNT(CASE WHEN gender = 'Female' THEN 1 END) AS female_count
FROM customers;

Este exemplo conta as linhas onde o gênero é ‘Male’ e ‘Female’ respectivamente.

Contando Múltiplas Condições

Ao combinar múltiplas condições, você pode contar dados em mais detalhes. Por exemplo, para contar o número de produtos com status ‘On Sale’ e ‘Discontinued’, use a seguinte consulta:

SELECT
    COUNT(CASE WHEN status = 'On Sale' THEN 1 END) AS on_sale_count,
    COUNT(CASE WHEN status = 'Discontinued' THEN 1 END) AS discontinued_count
FROM products;

Este método facilita a agregação de dados com base em condições específicas.

Exemplos de Consultas SQL

Aqui, apresentamos exemplos específicos de consultas SQL que combinam a função COUNT e instruções CASE para contar dados com base em condições específicas. Isso ajudará você a entender como usá-las em operações reais de banco de dados.

Exemplo 1: Contando Clientes por Faixa Etária

Esta consulta conta clientes em diferentes faixas etárias a partir de uma tabela de clientes.

SELECT
    COUNT(CASE WHEN age < 20 THEN 1 END) AS 'Under 20',
    COUNT(CASE WHEN age BETWEEN 20 AND 29 THEN 1 END) AS '20s',
    COUNT(CASE WHEN age BETWEEN 30 AND 39 THEN 1 END) AS '30s',
    COUNT(CASE WHEN age BETWEEN 40 AND 49 THEN 1 END) AS '40s',
    COUNT(CASE WHEN age >= 50 THEN 1 END) AS '50 and above'
FROM customers;

Esta consulta categoriza os clientes em cinco faixas etárias e conta o número em cada grupo.

Exemplo 2: Contando Produtos por Status

Esta consulta conta o número de produtos por seu status a partir de uma tabela de produtos.

SELECT
    COUNT(CASE WHEN status = 'In Stock' THEN 1 END) AS 'In Stock',
    COUNT(CASE WHEN status = 'Out of Stock' THEN 1 END) AS 'Out of Stock',
    COUNT(CASE WHEN status = 'Discontinued' THEN 1 END) AS 'Discontinued'
FROM products;

Esta consulta conta o número de produtos com status ‘In Stock’, ‘Out of Stock’ e ‘Discontinued’.

Exemplo 3: Contando Pedidos por Status

Esta consulta conta o número de pedidos por seu status a partir de uma tabela de pedidos.

SELECT
    COUNT(CASE WHEN status = 'New' THEN 1 END) AS 'New Orders',
    COUNT(CASE WHEN status = 'Processing' THEN 1 END) AS 'Processing Orders',
    COUNT(CASE WHEN status = 'Completed' THEN 1 END) AS 'Completed Orders'
FROM orders;

Esta consulta conta o número de pedidos com status ‘New’, ‘Processing’ e ‘Completed’.

Exemplos Avançados

A combinação da função COUNT e das instruções CASE pode ser aplicada a condições mais complexas para a agregação de dados. Aqui estão alguns exemplos práticos que podem ser úteis em cenários do mundo real.

Exemplo 1: Contando Clientes com Base no Histórico de Compras

Esta consulta conta clientes com base em se fizeram uma compra no último ano, usando uma tabela de clientes e uma tabela de histórico de compras.

SELECT
    COUNT(CASE WHEN purchase_date >= DATEADD(YEAR, -1, GETDATE()) THEN 1 END) AS 'Customers Purchased in Last Year',
    COUNT(CASE WHEN purchase_date < DATEADD(YEAR, -1, GETDATE()) OR purchase_date IS NULL THEN 1 END) AS 'Customers Not Purchased in Last Year'
FROM customers LEFT JOIN purchase_history ON customers.customer_id = purchase_history.customer_id;

Esta consulta conta clientes que fizeram uma compra no último ano e aqueles que não fizeram.

Exemplo 2: Contando Vendas por Categoria de Produto

Esta consulta conta o número de vendas por categoria de produto, juntando a tabela de vendas com a tabela de produtos.

SELECT
    product_category,
    COUNT(CASE WHEN sales_amount > 0 THEN 1 END) AS 'Sales Count'
FROM sales
JOIN products ON sales.product_id = products.product_id
GROUP BY product_category;

Esta consulta conta o número de produtos vendidos em cada categoria de produto.

Exemplo 3: Contando Múltiplas Condições

Esta consulta conta dados combinando múltiplas condições. Por exemplo, contando o status de compra dos clientes por faixa etária.

SELECT
    COUNT(CASE WHEN age < 20 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers Under 20 Who Purchased',
    COUNT(CASE WHEN age BETWEEN 20 AND 29 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers in 20s Who Purchased',
    COUNT(CASE WHEN age BETWEEN 30 AND 39 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers in 30s Who Purchased',
    COUNT(CASE WHEN age BETWEEN 40 AND 49 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers in 40s Who Purchased',
    COUNT(CASE WHEN age >= 50 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers 50 and Above Who Purchased'
FROM customers LEFT JOIN purchase_history ON customers.customer_id = purchase_history.customer_id;

Esta consulta conta o número de clientes com histórico de compras por faixa etária.

Conclusão

Combinar a função COUNT com instruções CASE permite uma contagem eficiente de dados com base em condições específicas em SQL. Este método é útil não apenas para agregação simples, mas também para avaliar e analisar dados com múltiplas condições ao mesmo tempo. Por meio de exemplos específicos de consultas, aprendemos como aplicar essas técnicas em operações reais de banco de dados, como contar clientes por faixa etária ou status de produto. Utilizar essas técnicas possibilita análises de dados mais avançadas e criação de relatórios.

Índice