Menu
Coddy logo textTech

COUNT com CASE

Parte da seção Além do Básico do Journey de SQL da Coddy — lição 12 de 27.

Você pode colocar uma expressão CASE dentro de um agregado. O truque é que o COUNT ignora NULL, então um CASE sem ELSE conta apenas as linhas que correspondem à condição.

SELECT
    COUNT(*) AS total,
    COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM users

Agora active_count é o número de linhas 'active', embora não tenhamos filtrado a consulta inteira. Este é o truque por trás de cada consulta de dashboard multi-métrica que você escreverá.

challenge icon

Desafio

Fácil

Tabelas e colunas disponíveis:

  • <strong>orders</strong>: <strong>id</strong>, <strong>customer_id</strong>, <strong>status</strong>

Para cada customer_id, retorne:

  • customer_id
  • total: total de pedidos que o cliente fez
  • shipped: contagem onde status = 'shipped'
  • cancelled: contagem onde status = 'cancelled'

Retorne apenas clientes que tenham pelo menos um pedido cancelado. Ordene por customer_id.

Folha de consulta

Use CASE dentro de COUNT para contar linhas que correspondem a uma condição sem filtrar a consulta inteira (COUNT ignora NULL, então omita a cláusula ELSE):

SELECT
    COUNT(*) AS total,
    COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM users

Experimente você mesmo

SELECT customer_id,
       COUNT(*) AS total,
       -- shipped, cancelled usando COUNT(CASE ...)
FROM orders
GROUP BY customer_id
-- filtrar para clientes com pelo menos um cancelamento
ORDER BY customer_id
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Além do Básico