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.
Quando houver duas condições, por exemplo: se for menino e tirou mais que 8 então "bom"
ResponderExcluirse for menina e tirou mais que 8 então "Boa"
?
Boa Tarde Rafael, segue abaixo um exemplo com o script, no caso você tem que usar o "CASE WHEN" aninhado, ou seja um "CASE WHEN" DENTRO DE OUTRO "CASE WHEN":
Excluir/*CRIAÇÃO DE UMA TABELA*/
CREATE TABLE TB_NOTA
(
id serial,
sexo varchar(1),
nota numeric (5,2)
);
/*INCLUSÃO DE DADOS NA TABELA*/
INSERT INTO TB_NOTA (sexo, nota) VALUES ('F', 9.00);
INSERT INTO TB_NOTA (sexo, nota) VALUES ('F', 8.50);
INSERT INTO TB_NOTA (sexo, nota) VALUES ('F', 6.40);
INSERT INTO TB_NOTA (sexo, nota) VALUES ('F', 4.20);
INSERT INTO TB_NOTA (sexo, nota) VALUES ('F', 10.0);
INSERT INTO TB_NOTA (sexo, nota) VALUES ('F', 8.50);
INSERT INTO TB_NOTA (sexo, nota) VALUES ('F', 6.40);
INSERT INTO TB_NOTA (sexo, nota) VALUES ('F', 4.20);
INSERT INTO TB_NOTA (sexo, nota) VALUES ('M', 10.00);
INSERT INTO TB_NOTA (sexo, nota) VALUES ('M', 8.25);
INSERT INTO TB_NOTA (sexo, nota) VALUES ('M', 7.40);
INSERT INTO TB_NOTA (sexo, nota) VALUES ('M', 6.20);
INSERT INTO TB_NOTA (sexo, nota) VALUES ('M', 3.5);
INSERT INTO TB_NOTA (sexo, nota) VALUES ('M', 2.5);
/*EXEMPLO DO SELECT COM CASE WHEN ANINHADO*/
/*Utilize o operador relacional ">=", (maior ou igual para classificar a nota no "CASE WHEN")*/
SELECT
id,
sexo,
nota,
CASE
/*Quando a nota for maior ou igual que 9*/
WHEN (nota >= 9) THEN
CASE
/*Quando o sexo for feminino*/
WHEN (sexo = 'F') THEN
'Garota você tirou uma Ótima nota'
/*Quando o sexo for masculino*/
WHEN (sexo = 'M') THEN
'Garoto você tirou uma Ótima nota'
END
WHEN (nota >= 8) THEN
CASE
/*Quando o sexo for feminino*/
WHEN (sexo = 'F') THEN
'Garota você tirou uma Boa nota'
/*Quando o sexo for masculino*/
WHEN (sexo = 'M') THEN
'Garoto você tirou uma Boa nota'
END
WHEN (nota >= 5) THEN
CASE
/*Quando o sexo for feminino*/
WHEN (sexo = 'F') THEN
'Garota você tirou uma nota Regular'
/*Quando o sexo for masculino*/
WHEN (sexo = 'M') THEN
'Garoto você tirou uma nota Regular'
END
ELSE
CASE
/*Quando o sexo for feminino*/
WHEN (sexo = 'F') THEN
'Garota você tirou uma nota Ruim'
/*Quando o sexo for masculino*/
WHEN (sexo = 'M') THEN
'Garoto você tirou uma nota Ruim'
END
END AS classificacao_nota
FROM TB_NOTA;
--RESULTADO DO SELECT
id sexo nota classificacao_nota
114 F 9 Garota você tirou uma Ótima nota
115 F 8.5 Garota você tirou uma Boa nota
116 F 6.4 Garota você tirou uma nota Regular
117 F 4.2 Garota você tirou uma nota Ruim
118 F 10 Garota você tirou uma Ótima nota
119 F 8.5 Garota você tirou uma Boa nota
120 F 6.4 Garota você tirou uma nota Regular
121 F 4.2 Garota você tirou uma nota Ruim
122 M 10 Garoto você tirou uma Ótima nota
123 M 8.25 Garoto você tirou uma Boa nota
124 M 7.4 Garoto você tirou uma nota Regular
125 M 6.2 Garoto você tirou uma nota Regular
126 M 3.5 Garoto você tirou uma nota Ruim
127 M 2.5 Garoto você tirou uma nota Ruim
Ao colar o script foram perdidos a cor e a identação: postei no sqlfiddle:
ResponderExcluirhttp://sqlfiddle.com/#!15/920e0/1
que permite uma melhor visualização:
* Na parte de cima estão os scripts com o exemplo do "CASE WHEN ANINHADO";
*Utilize a barra de rolagem do navegador até o final e veja a exibição da tabela com o resultado do "SELECT".
gostei, muito bom
ResponderExcluirFico feliz por ter gostado. Grata
ExcluirE para colocar uma condição na busca. Tipo listar só alunos acima de 8.0?
ResponderExcluirPrimeiramente, obrigada por acompanhar o blog.
ExcluirSegue um exemplo, espero que ajude.
Exemplo:
CREATE TABLE TB_NOTA
(
id serial,
aluno varchar(255),
nota numeric (5,2)
);
/*INCLUSÃO DE DADOS NA TABELA*/
INSERT INTO TB_NOTA (aluno, nota) VALUES ('Paulo', 9.00);
INSERT INTO TB_NOTA (aluno, nota) VALUES ('Maria', 8.50);
INSERT INTO TB_NOTA (aluno, nota) VALUES ('Joao', 6.40);
INSERT INTO TB_NOTA (aluno, nota) VALUES ('Ana', 4.20);
INSERT INTO TB_NOTA (aluno, nota) VALUES ('Maria', 10.0);
INSERT INTO TB_NOTA (aluno, nota) VALUES ('Joana', 8.50);
INSERT INTO TB_NOTA (aluno, nota) VALUES ('Paula', 6.40);
INSERT INTO TB_NOTA (aluno, nota) VALUES ('Marcos', 4.20);
/*
ESTA CONSUTA (QUERY) - FILTRA APENAS OS ALUNOS QUE TIRARAM NOTA MAIOR OU IGUAL A 8
FOI UTILIZADO O COMANDO "WHERE"
*/
SELECT id,
aluno,
nota,
'ótimo' AS desempenho
FROM TB_NOTA
WHERE (nota >= 8) ;