Translate

Mostrando postagens com marcador condicional. Mostrar todas as postagens
Mostrando postagens com marcador condicional. Mostrar todas as postagens

terça-feira, 12 de novembro de 2013

Mysql - IF e CASE

Neste post vamos apresentar 4 exemplos:

  • 1 exemplo de como utilizar a expressão condicional "if";
  • 3 exemplos de como utilizar a expressão condicional "case";

EXPRESSÃO CONDICIONAL - IF

O uso do "If" é indicado quando temos que testar 1 condição. Esta expressão tem a funcionalidade de:

testar uma condição
    se a condição for verdadeira, executa algo
    se a condição for falsa, executa algo diferente

SINTAXE
IF(teste, 'verdadeiro', falso)

1º Exemplo

Cenário: em uma loja de informática temos que verificar o estoque de produtos. Se a quantidade de um determinado produto for maior que 50, vamos considerar que o estoque está alto, caso contrário vamos considerar que o estoque está baixo. Vamos utilizar a tabela "tb_estoque" para fazer esta verificação. 
Veja a imagem da tabela "tb_estoque" abaixo:


Para aplicar esta regra, executamos a sentença abaixo:

SELECT
IF(quantidade > 50, 'alto', 'baixo') AS classificacao
FROM tb_estoque;

Após a execução da sentença, podemos ver o resultado na imagem abaixo:




EXPRESSÃO CONDICIONAL - CASE

O uso do "Case" é indicado quando temos que testar mais que 1 condição.
Esta expressão tem a funcionalidade de:

Testar uma condição 
    Se for verdadeira,  executa algo e sai da instrução, senão vai para o próximo teste
Testar uma segunda condição
    Se for verdadeira,  executa algo e sai da instrução, senão vai para o próximo teste
Testar uma terceira condição
    Se for verdadeira,  executa algo e sai da instrução, senão vai para o próximo teste
... e assim por diante


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";
Podemos ver a imagem da tabela "time_futebol":


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:
  • 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
Podemos ver a imagem da tabela "tb_nota":


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

Cenário: Com base na tabela "tb_nota". Queremos saber...




Quantos alunos tiveram um desempenho ótimo?
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
Para aplicar esta regra, executamos a sentença abaixo:

SELECT
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;


Em breve postaremos mais exemplos com expressões condicionais.

quarta-feira, 30 de outubro de 2013

Postgresql - Exemplo CASE WHEN

Case é uma expressão condicional, similar a if/else em outras linguagens de programação.
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";
Podemos ver a imagem da tabela "time_futebol":


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:
  • 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
Podemos ver a imagem da tabela "tb_nota":


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

Cenário: Com base na tabela "tb_nota". Queremos saber...



Quantos alunos tiveram um desempenho ótimo?
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
Para aplicar esta regra, executamos a sentença abaixo:

SELECT
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.