Menu
Coddy logo textTech

Transformando Linhas em Colunas

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

Combine agregação condicional com GROUP BY para transformar linhas em colunas. É a versão SQL de uma tabela dinâmica de planilha.

Suponha que sales tenha linhas como (month, product, units). Para ver uma linha por mês com uma coluna por produto:

SELECT
    month,
    SUM(CASE WHEN product = 'A' THEN units ELSE 0 END) AS product_a,
    SUM(CASE WHEN product = 'B' THEN units ELSE 0 END) AS product_b
FROM sales
GROUP BY month

O agrupamento GROUP BY que cada SUM(CASE …) vê são as linhas de um mês; o CASE seleciona a fatia para um produto.

challenge icon

Desafio

Fácil

Tabelas e colunas disponíveis:

  • <strong>sales</strong>: <strong>month</strong>, <strong>product</strong>, <strong>units</strong>

Pivoteie os dados para que cada linha seja um month com estas colunas:

  • month
  • apples: total de units para o produto 'apples' naquele mês
  • bananas: o mesmo para 'bananas'
  • cherries: o mesmo para 'cherries'
  • total: total de units de todos os produtos naquele mês

Retorne apenas os meses cujo total seja pelo menos 20. Ordene por month.

Folha de consulta

Use agregação condicional com GROUP BY para transformar linhas em colunas:

SELECT
    month,
    SUM(CASE WHEN product = 'A' THEN units ELSE 0 END) AS product_a,
    SUM(CASE WHEN product = 'B' THEN units ELSE 0 END) AS product_b,
    SUM(units) AS total
FROM sales
GROUP BY month
HAVING SUM(units) >= threshold
ORDER BY month

Cada SUM(CASE …) soma apenas as linhas que correspondem a esse produto dentro de cada agrupamento GROUP BY.

Experimente você mesmo

SELECT month,
       -- um SUM(CASE ...) por produto, mais o total
FROM sales
GROUP BY month
-- filtrar para meses com total >= 20
ORDER BY month
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