CASE WHEN no SQL (Condicionais)

No SAS e em outras linguagens, contamos com o IF para criar novas informações a partir de outras que já temos. Por exemplo, se eu quero criar um campo que receba 1, se o cliente for de MG, e 0, caso contrário, eu apelo para o IF. E é muito intuitivo. SE (if) o cliente é de MG (UF=”MG”) então (then) o campo novo recebe 1. Caso contrário, recebe 0. Seria algo como o script abaixo:

if UF = "MG" then campo_novo = 1;
else campo_novo = 0.

Mas como fazer isso no SQL?

Neste caso, utiliza-se o CASE WHEN.

Vamos replicar o mesmo exemplo acima, teremos clientes de vários estados e vamos criar um campo novo que recebe 1 se o cliente for de MG e 0 caso contrário:

-- criamos a base de exemplo
create table base
(
Nome varchar(50),
UF varchar(2),
age int,
value decimal
);

insert into base values
('Paulo','MG', 40, 100),
('Ana' , 'BA', 30, 350),
('Bia' , 'BA', 70, 350),
('Eduardo' , 'BA', 66, 550),
('Marcelo' , 'MG', 32, 400),
('Marcos' , 'MG', 41, 350),
('Paula' , 'BA', 55, 300),
('Thiago' , 'MG', 30, 150),
('Renato' , 'BA', 24, 250),
('Sandra' , 'MG', 42, 100);

-- criamos o campo novo que recebe 1 se o cliente for de MG
select *, 
case when UF = "MG" then 1 else 0 end as campo_novo
from base;

Diferente dos outros comandos, a sintaxe do CASE WHEN não é tão intuitiva. Porém, não é difícil de pegar o jeito. Note que você está dizendo para o SQL “caso isso aconteça” atribua um valor ao campo novo, do contrário, atribua um outro valor. Encerre e nomeie este campo. De outra forma, a sintaxe é:

CASE WHEN condicao_desejada then valor_caso_atenda_condicao
else valor_caso_nao_atenda_condicao end as nome_do_campo_novo

Vamos praticar um pouco!

Imagine que você queira criar um campo que receba 1 caso os clientes tenham 40 anos ou mais e 0 caso contrário. Vejamos como isso fica:

select *,
    case when age>=40 then 1 else 0 end as campo_novo_2
from base;

Veja que você pode querer criar uma tabela nova apenas com o campo nome, UF e o campo_novo_2:

select nome, UF,
    case when age>=40 then 1 else 0 end as campo_novo_2
from base;

O CASE WHEN pode servir para criar múltiplas condições também. Imagine que você queira dividir os seus clientes em grupos de acordo com a idade. Caso o cliente tenha entre 20 e 30 anos, ele pertencerá ao grupo 1; caso ele tenha entre 30 e 40, pertencerá ao grupo 2, e assim por diante. Três coisas para se prestar atenção aqui: (1) o CASE WHEN não se repete, somente o WHEN, (2) o nome do campo só é atribuído ao fim de todas as condições, (3) não há vírgula separando as condições:

select nome, UF,
    case when age between 20 and 30 then 'Grupo 1'
    when age between 30 and 40 then 'Grupo 2'
    when age between 40 and 50 then 'Grupo 3'
    when age between 50 and 60 then 'Grupo 4'
    when age between 60 and 70 then 'Grupo 5'
    else 'Grupo 6'
    end as grupos
from base;

Você pode combinar o CASE WHEN com operadores como o SUM para fazer alguns resumos dos dados. Por exemplo, podemos contar quantas pessoas temos com idade superior a 50 anos por UF:

select UF, 
sum(case when age > 50 then 1 else 0 end) as qtd_maior_50
from base
group by 1;

O CASE WHEN é um comando poderosíssimo capaz de te ajudar a manipular e ter visões diferentes dos dados. É importante que você tenha o domínio dele. Pratique bastante!

E se você gostou do conteúdo, por favor não deixe de comentar, dar seu feedback e compartilhar com seus amigos. De verdade, isso faz toda a diferença. Você também pode acompanhar mais do meu trabalho seguindo a conta de Twitter @EstatSite ou por alguma das redes que você encontra em Sobre o Estatsite / Contato.

Bons estudos!

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *