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 usersAgora 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á.
Desafio
FácilTabelas e colunas disponíveis:
<strong>orders</strong>:<strong>id</strong>,<strong>customer_id</strong>,<strong>status</strong>
Para cada customer_id, retorne:
customer_idtotal: total de pedidos que o cliente fezshipped: contagem ondestatus = 'shipped'cancelled: contagem ondestatus = '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 usersExperimente 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
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
3Agregação Condicional
COUNT com CASESUM com CASETransformando Linhas em ColunasRecapitulação - Fontes de Tráfego