A expressão CASE
CASE é o "if/else" do SQL: avalia condições em ordem e retorna o
valor da primeira que se cumpre. É uma expressão, então pode ir em
qualquer lugar onde caiba um valor: no SELECT, no ORDER BY, etc.
SELECT
nome,
preco,
CASE
WHEN preco < 50 THEN 'barato'
WHEN preco < 200 THEN 'medio'
ELSE 'caro'
END AS faixa
FROM produtos;
- Cada
WHEN ... THEN ...é uma condição e seu resultado. - São avaliadas de cima para baixo: vence a primeira que for verdadeira.
ELSEé o valor padrão se nenhuma condição se cumprir. Se você o omitir e nenhum ramo casar, o resultado éNULL.ENDfecha a expressão. ComASvocê dá nome à coluna calculada.
Forma abreviada
Quando você compara uma mesma coluna contra valores concretos, há uma forma mais curta:
SELECT nome,
CASE categoria
WHEN 'perifericos' THEN 'acessorio'
WHEN 'telas' THEN 'visualizacao'
ELSE 'outro'
END AS tipo
FROM produtos;
Cuidado com a ordem das condições. Como vence a primeira que se cumpre, os ramos mais específicos devem vir antes dos mais gerais.
Exemplos
Classificar preços em faixas legíveis
SELECT nome, preco,
CASE
WHEN preco < 50 THEN 'barato'
WHEN preco < 200 THEN 'medio'
ELSE 'caro'
END AS faixa
FROM produtos
ORDER BY preco;