5.5 Lógica condicional com CASE WHEN
5.5 Lógica condicional com CASE WHEN#
Além das consultas simples e funções agregadas, o SQL também permite a utilização de lógicas condicionais avançadas através da sintaxe CASE WHEN
. Leitores usuários de planilhas eletrônicas logo notarão a semelhança com a função IF ELSE()
e suas derivações.
O CASE WHEN
é uma operação realizada em cima dos valores de uma ou mais colunas que retorna uma nova coluna com o resultado da condição:
SELECT
CASE
WHEN condicao1 THEN resultado1
WHEN condicao2 THEN resultado2
(...)
ELSE resultado_se_falso
END AS nome_nova_coluna
FROM tabela
GROUP BY <nome_do_campo1,nome_do_campo2, etc..>
No exemplo abaixo, classificamos os produtos da Northwind em diferentes categorias de preço usando o CASE WHEN:
%%sql
SELECT ProductName, UnitPrice,
CASE
WHEN UnitPrice >= 100 THEN "Alto Valor"
WHEN UnitPrice > 50 and "UnitPrice" < 100 THEN "Médio Valor"
ELSE "Baixo Valor"
END AS ProductCategory
FROM 'Product'
LIMIT 10
ProductName | UnitPrice | ProductCategory |
---|---|---|
Chai | 18 | Baixo Valor |
Chang | 19 | Baixo Valor |
Aniseed Syrup | 10 | Baixo Valor |
Chef Anton's Cajun Seasoning | 22 | Baixo Valor |
Chef Anton's Gumbo Mix | 21.35 | Baixo Valor |
Grandma's Boysenberry Spread | 25 | Baixo Valor |
Uncle Bob's Organic Dried Pears | 30 | Baixo Valor |
Northwoods Cranberry Sauce | 40 | Baixo Valor |
Mishi Kobe Niku | 97 | Médio Valor |
Ikura | 31 | Baixo Valor |
Mas o que aconteceria se ao invés de simplesmente classificar os produtos nessa nova categoria, quiséssemos contar quantos produtos estão em cada uma? Para isso, basta aplicar uma consulta agregada COUNT
utilizando nossa nova coluna como parte da cláusula GROUP BY
:
%%sql
SELECT COUNT(ProductName) as num_produtos,
CASE
WHEN UnitPrice >= 100 THEN "Alto Valor"
WHEN UnitPrice > 50 and "UnitPrice" < 100 THEN "Médio Valor"
ELSE "Baixo Valor"
END AS ProductCategory
FROM 'Product'
GROUP BY ProductCategory
num_produtos | ProductCategory |
---|---|
2 | Alto Valor |
70 | Baixo Valor |
5 | Médio Valor |
Agora que criamos nossa categorização de produtos, podemos dar um passo a mais e usá-la para calcular nossas vendas totais por categoria. Mas como fazemos isso se essa coluna só existe em nossa consulta SQL e não no banco de dados em si? Para isso vamos utilizar o conceito da subquery (ou subconsulta). Até a proxima seção!