Menu
Coddy logo textTech

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 users

SUM(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.

challenge icon

Desafio

Fácil

Tabelas 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:

  • category
  • net_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 users

SUM(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
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