Case When Flashcards
(17 cards)
Para que serve o comando CASE WHEN no SQL?
Para criar condições lógicas dentro da consulta, funcionando como uma estrutura condicional (if/else).
Qual é a estrutura básica do CASE WHEN?
CASE
WHEN condição1 THEN resultado1
WHEN condição2 THEN resultado2
ELSE resultado_padrão
END
Como usar CASE WHEN para classificar clientes por idade?
SELECT nome,
CASE
WHEN idade < 18 THEN ‘Menor de idade’
WHEN idade BETWEEN 18 AND 59 THEN ‘Adulto’
ELSE ‘Idoso’
END AS faixa_etaria
FROM clientes;
CASE WHEN pode ser usado dentro de SELECT?
Sim, é o uso mais comum. Pode ser usado para criar colunas calculadas ou classificações condicionais.
Posso usar CASE WHEN com ORDER BY?
Sim! Exemplo:
SELECT nome, status
FROM pedidos
ORDER BY
CASE
WHEN status = ‘Urgente’ THEN 1
WHEN status = ‘Normal’ THEN 2
ELSE 3
END;
Como contar quantos clientes são adultos, usando CASE e SUM?
SELECT SUM(
CASE
WHEN idade >= 18 THEN 1
ELSE 0
END
) AS qtd_adultos
FROM clientes;
Posso usar CASE em uma cláusula WHERE?
Não diretamente. Mas é possível usar CASE para construir valores dentro de SELECT, ORDER BY, ou até mesmo GROUP BY.
Faça o seguinte critério de classificação para os produtos na tabela de Produtos:
Um PRODUTO CARO é aquele que tem um preço de lista maior ou igual a 12;
Um PRODUTO EM CONTA deve estar entre 7 e 12;
Um PRODUTO BARATO tem um preço de lista menor do que 7.
SELECT NOME_DO_PRODUTO, PRECO_DE_LISTA,
(CASE
WHEN PRECO_DE_LISTA >= 12 THEN ‘PRODUTO CARO’
WHEN PRECO_DE_LISTA >= 7 AND PRECO_DE_LISTA < 12 THEN ‘PRODUTO EM CONTA’
ELSE ‘PRODUTO BARATO’
END) AS CLASSIFICACAO
FROM TABELA_DE_PRODUTOS;
Como usar CASE WHEN dentro de um WHERE para aplicar filtros diferentes?
CASE não pode ser usado diretamente no WHERE, mas você pode simular com expressões equivalentes. Exemplo com OR/AND:
SELECT * FROM clientes
WHERE (sexo = ‘M’ AND idade >= 18)
OR (sexo = ‘F’ AND idade >= 21);
Como usar CASE WHEN com WHERE usando subconsulta ou coluna derivada?
Utilize CASE em uma subquery:
SELECT * FROM (
SELECT nome, idade,
CASE
WHEN idade >= 18 THEN ‘Maior de idade’
ELSE ‘Menor de idade’
END AS classificacao
FROM clientes
)
WHERE classificacao = ‘Maior de idade’;
Como filtrar resultados com base no valor retornado por um CASE?
Use uma CTE ou subconsulta com CASE e filtre a saída:
WITH clientes_classificados AS (
SELECT nome, idade,
CASE
WHEN idade < 18 THEN ‘Menor’
ELSE ‘Maior’
END AS faixa
FROM clientes
)
SELECT * FROM clientes_classificados
WHERE faixa = ‘Maior’;
Por que CASE não funciona diretamente em WHERE?
Porque o WHERE espera uma expressão booleana (verdadeiro/falso) e o CASE retorna valores, não uma condição direta.
Para que se usa CASE WHEN no ORDER BY?
Para definir ordens de classificação personalizadas, atribuindo pesos numéricos a cada condição.
Trazer alunos aprovados (‘A’) antes de reprovados (‘R’), depois ordenar pela nota DESC.
SELECT nome, status, nota
FROM alunos
ORDER BY
CASE status WHEN ‘A’ THEN 1 ELSE 2 END,
nota DESC;
Colocar clientes com debito > 0 no topo; restantes depois por nome.
SELECT nome, debito
FROM clientes
ORDER BY
CASE
WHEN debito > 0 THEN 1
ELSE 2
END,
nome;
Dica de performance ao usar CASE no ORDER BY.
Garanta que as condições do CASE sejam simples; índices não são aproveitados se funções complexas forem aplicadas à coluna.
Para cada cliente, temos seus limites de crédito mensais. Liste somente os nomes dos clientes e os classifique por:
Acima ou igual a 150.000 de limite de crédito - Clientes grandes
Entre 150.000 e 110.000 de limite de crédito - Clientes médios
Menores que 110.000 de limite de crédito - Clientes pequenos
SELECT NOME,
(CASE WHEN LIMITE_DE_CREDITO >= 150000 THEN ‘Clientes grandes’
WHEN LIMITE_DE_CREDITO < 150000 AND LIMITE_DE_CREDITO >= 110000 THEN ‘Clientes medios’
ELSE ‘Clientes pequenos’
END)
FROM TABELA_DE_CLIENTES