Abaixo serão descritos 3 exemplos da utilização do case em consultas.
No final do artigo, segue os links com um exemplo "bônus", de como utilizar o "CASE WHEN ANINHADO", ou seja, um "CASE WHEN" dentro de outro "CASE WHEN", caso seja necessário avaliar mais de uma condição.
1º Exemplo
Cenário: Serão distribuídos uniformes para times de futebol, de acordo com a seguinte regra:
- O time "A" receberá uniforme da cor "Amarela";
- O time "B" receberá uniforme da cor "Azul";
- O time "C" receberá uniforme da cor "Vermelha";
Para aplicar esta regra, executamos a sentença abaixo:
SELECT
time,
CASE
WHEN time = 'A' THEN 'Amarela'
WHEN time = 'B' THEN 'Azul'
WHEN time = 'C' THEN 'Vermelha'
END
AS cor_uniforme
FROM time_futebol;
Após a execução poderemos ver o resultado da distribuição das cores dos uniformes na imagem abaixo:
Significado
SELECT
time,
/*Inicie a condição com CASE*/
CASE
/*Quando o time for o A então receberá uniforme da cor Amarela*/
WHEN time = 'A' THEN 'Amarela'
/*Quando o time for o B então receberá uniforme da cor Azul*/
WHEN time = 'B' THEN 'Azul'
/*Quando o time for o C então receberá uniforme da cor Vermelha*/
WHEN time = 'C' THEN 'Vermelha'
/*Termine a condição com END*/
END
/*após os "AS" colocamos o nome da nova coluna que será exibida, ou seja cor_uniforme*/
AS cor_uniforme
FROM time_futebol;
Observações
- Inicie a condição com CASE;
- coloque WHEN para iniciar uma condição;
- após o THEN colocamos o resultado da condição se ela for verdadeira;
- coloque END para finalizar a condicão;
- após o AS colocaremos o nome da nova coluna que será exibida;
2º Exemplo
Cenário: queremos classificar o desempenho de cada aluno de acordo com a sua nota. Utilizaremos a seguinte regra:
Cenário: queremos classificar o desempenho de cada aluno de acordo com a sua nota. Utilizaremos a seguinte regra:
- se a nota for maior ou igual a 8.0 é ótimo;
- se a nota for maior ou igual a 6.0 é bom;
- se a nota for maior ou igual a 4.0 é regular;
- se a nota for maior ou igual a 2.0 é ruim;
- senão será péssimo
Para aplicar esta regra, executamos a sentença abaixo:
SELECT
aluno,
nota,
CASE
WHEN nota >= 8.0 THEN 'ótimo'
WHEN nota >= 6.0 THEN 'bom'
WHEN nota >= 4.0 THEN 'regular'
WHEN nota >= 2.0 THEN 'ruim'
ELSE 'péssimo'
END
AS desempenho
FROM tb_nota;
Após a execução poderemos ver o resultado do desempenho na imagem abaixo:
Significado:
SELECT
aluno,
nota,
/*Inicie a condição com CASE*/
CASE
/*se a nota for maior ou igual a 8.0 o desempenho é ótimo*/
WHEN nota >= 8.0 THEN 'ótimo'
/*se a nota for maior ou igual a 6.0 o desempenho é bom*/
WHEN nota >= 6.0 THEN 'bom'
/*se a nota for maior ou igual a 4.0 o desempenho é regular*/
WHEN nota >= 4.0 THEN 'regular'
/*se a nota for maior ou igual a 2.0 o desempenho é ruim*/
WHEN nota >= 2.0 THEN 'ruim'
/*senão é péssimo*/
ELSE 'péssimo'
/*Termine a condição com END*/
END
/*após os "AS" colocamos o nome da nova coluna que será exibida, ou seja desempenho*/
AS desempenho
FROM tb_nota;
3º Exemplo
Quantos alunos tiveram um desempenho bom?
Quantos alunos tiveram um desempenho regular?
Quantos alunos tiveram um desempenho ruim?
Quantos alunos tiveram um desempenho péssimo?
Classificação do desempenho
- se a nota for maior ou igual a 8.0 o desempenho é ótimo;
- se a nota for maior ou igual a 6.0 o desempenho é bom;
- se a nota for maior ou igual a 4.0 o desempenho é regular;
- se a nota for maior ou igual a 2.0 o desempenho é ruim;
- senão será péssimo
SELECT
CASE
CASE
WHEN nota >= 8.0 THEN 'ótimo'
WHEN nota >= 6.0 THEN 'bom'
WHEN nota >= 4.0 THEN 'regular'
WHEN nota >= 2.0 THEN 'ruim'
ELSE 'péssimo'
END AS desempenho,
COUNT(*) AS quantidade
FROM tb_nota
GROUP BY desempenho
ORDER BY desempenho;
Após a execução poderemos ver o resultado do desempenho na imagem abaixo:
Significado:
SELECT
/*Inicie a condição com CASE*/
CASE
/*se a nota for maior ou igual a 8.0 o desempenho é ótimo*/
WHEN nota >= 8.0 THEN 'ótimo'
/*se a nota for maior ou igual a 6.0 o desempenho é bom*/
WHEN nota >= 6.0 THEN 'bom'
/*se a nota for maior ou igual a 4.0 o desempenho é regular*/
WHEN nota >= 4.0 THEN 'regular'
/*se a nota for maior ou igual a 2.0 o desempenho é ruim*/
WHEN nota >= 2.0 THEN 'ruim'
/*senão é péssimo*/
ELSE 'péssimo'
/*Termine a condição com END*/
END
/*após os "AS" colocamos o nome da nova coluna que será exibida, ou seja desempenho*/
AS desempenho,
/*A função COUNT faz a contagem por desempenho, ou seja quantos tiveram desempenho bom, ruim, etc
*Chamamos a coluna que exibirá a contagem de quantidade.
*/
COUNT(*) AS quantidade
FROM tb_nota
/*agrupa os desempenhos*/
GROUP BY desempenho
/*ordena a coluna desempenho em ordem alfabética*/
ORDER BY desempenho;
4º Exemplo
Classificar os alunos de acordo com o sexo e com a nota.
Neste exemplo, vamos utilizar, o "CASE WHEN ANINHADO", para classificarmos mais de uma condição dentro do "CASE WHEN"
Veja o script com o exemplo e a visualização no: github (está página carrega mais rápido em conexões lentas) ou no sqlfiddle.
4º Exemplo
Classificar os alunos de acordo com o sexo e com a nota.
Neste exemplo, vamos utilizar, o "CASE WHEN ANINHADO", para classificarmos mais de uma condição dentro do "CASE WHEN"
Veja o script com o exemplo e a visualização no: github (está página carrega mais rápido em conexões lentas) ou no sqlfiddle.