SUM com CASE
Parte da seção Além do Básico do Journey de SQL da Coddy — lição 13 de 27.
A mesma ideia funciona com SUM: e é ainda mais flexível. O CASE pode retornar 1 para linhas correspondentes e 0 para todo o resto, ou pode retornar qualquer valor numérico para ponderar as linhas de forma diferente.
SELECT
SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) AS active_count,
SUM(CASE WHEN plan = 'pro' THEN amount ELSE 0 END) AS pro_revenue
FROM usersSUM(CASE … THEN 1 ELSE 0 END) e COUNT(CASE … THEN 1 END) fornecem o mesmo resultado para contagem; escolha o estilo que sua equipe preferir.
Desafio
FácilTabelas e colunas disponíveis:
<strong>transactions</strong>:<strong>id</strong>,<strong>category</strong>,<strong>type</strong>,<strong>amount</strong>
type é 'sale' ou 'refund'. Para cada category retorne:
categorynet_revenue: soma dos valores de venda menos a soma dos valores de reembolso
Calcule net_revenue em uma única expressão SUM(CASE …) onde os reembolsos contribuem com seu valor como um número negativo. Ordene por net_revenue em ordem decrescente.
Folha de consulta
Use SUM com CASE para agregar valores condicionalmente — retorne 1/0 para contagem, ou valores reais para somas ponderadas:
SELECT
SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) AS active_count,
SUM(CASE WHEN plan = 'pro' THEN amount ELSE 0 END) AS pro_revenue
FROM usersSUM(CASE … THEN 1 ELSE 0 END) e COUNT(CASE … THEN 1 END) produzem o mesmo resultado de contagem.
Experimente você mesmo
SELECT category,
-- um SUM(CASE ...) onde reembolsos contam como negativo
FROM transactions
GROUP BY category
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