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 monthO agrupamento GROUP BY que cada SUM(CASE …) vê são as linhas de um mês; o CASE seleciona a fatia para um produto.
Desafio
FácilTabelas 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:
monthapples: total deunitspara o produto'apples'naquele mêsbananas: o mesmo para'bananas'cherries: o mesmo para'cherries'total: total deunitsde 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 monthCada 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
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