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 as linhas correspondentes e 0 para todo o restante, ou pode retornar qualquer valor numérico para atribuir pesos diferentes às linhas.
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) dão o mesmo resultado para contagem; escolha o estilo que sua equipe prefere.
Desafio
FácilTabelas e colunas disponíveis:
transactions:id,category,type,amount
type é 'sale' ou 'refund'. Para cada category, retorne:
categorynet_revenue: soma dos valores de vendas menos a soma dos valores de reembolsos
Calcule net_revenue em uma única expressão SUM(CASE …), na qual os reembolsos contribuam com seu valor como um número negativo. Ordene por net_revenue em ordem decrescente.
Experimente você mesmo
SELECT category,
-- um SUM(CASE ...) onde reembolsos contam 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áfegoPratique por conta própria: Playground de SQL