Caso em MySQL: 11 Exemplos Práticos

Última atualização: 25 de maio de 2025
  • A função CASE no MySQL permite que você execute avaliações condicionais e retorne resultados personalizados.
  • Várias condições podem ser usadas com a cláusula WHEN e valores nulos podem ser manipulados com ELSE.
  • CASE pode ser combinado com funções de agregação para otimizar consultas.
  • Seguir as melhores práticas ao usar CASE é essencial para manter o desempenho e a legibilidade do código.
Caso em Mysql

A função CASE no MySQL é uma ferramenta poderosa que permite executar operações condicionais em suas consultas. Com o CASE, você pode avaliar diferentes condições e retornar resultados específicos dependendo se essas condições são atendidas ou não. Vamos explicar essa função com exemplos práticos que ajudarão você a dominar o uso do CASE no MySQL e melhorar suas habilidades no gerenciamento de banco de dados.

O que é a função CASE no MySQL?

A função CASE no MySQL é uma expressão condicional que permite avaliar diferentes condições e retornar resultados específicos dependendo se essas condições forem atendidas. É uma ferramenta muito útil para realizar operações lógicas em suas consultas e obter resultados personalizados com base em critérios específicos.

CASE funciona de forma semelhante a uma série de instruções IF-THEN-ELSE, onde você pode especificar várias condições e os valores a serem retornados quando essas condições forem atendidas. Se nenhuma das condições for atendida, você pode definir um valor padrão usando a cláusula ELSE.

Sintaxe CASE básica no MySQL

A sintaxe básica da função CASE no MySQL é a seguinte:

CASE
    WHEN condición1 THEN resultado1
    WHEN condición2 THEN resultado2
    ...
    WHEN condiciónN THEN resultadoN
    ELSE resultado_predeterminado
END

Aqui está uma explicação de cada parte da sintaxe:

  • WHEN: Especifica a condição a ser avaliada.
  • THEN: Indica o resultado que será retornado se a condição correspondente for atendida.
  • ELSE: (Opcional) Especifica o resultado a ser retornado se nenhuma das condições acima for atendida.
  • END: Marca o fim da expressão CASE.

Agora que você conhece a sintaxe básica, vamos explorar alguns exemplos práticos!

Exemplo 1: Classificar os alunos de acordo com sua média

Suponha que você tenha uma tabela chamada “alunos” com as seguintes colunas: “id”, “nome” e “avg”. Você quer classificar os alunos pelo GPA usando a função CASE. Você pode fazer assim:

SELECT nombre,
       CASE
           WHEN promedio >= 90 THEN 'Sobresaliente'
           WHEN promedio >= 80 THEN 'Notable'
           WHEN promedio >= 70 THEN 'Bien'
           WHEN promedio >= 60 THEN 'Suficiente'
           ELSE 'Insuficiente'
       END AS clasificacion
FROM estudiantes;

Neste exemplo, usamos CASE para avaliar a média de cada aluno e atribuir uma classificação correspondente. Se a média for maior ou igual a 90, ela é classificada como "Excelente". Se estiver entre 80 e 89, é classificado como “Notável”, e assim por diante. Se a média for menor que 60, ela é classificada como "Insuficiente".

Exemplo 2: Atribuição de categorias de produtos

Imagine que você tem uma tabela chamada “produtos” com colunas “id”, “nome” e “preço”. Você deseja atribuir uma categoria a cada produto com base em seu preço usando a função CASE. Você pode fazer assim:

SELECT nombre,
       CASE
           WHEN precio > 1000 THEN 'Premium'
           WHEN precio > 500 THEN 'Gama alta'
           WHEN precio > 100 THEN 'Gama media'
           ELSE 'Económico'
       END AS categoria
FROM productos;

Neste exemplo, usamos CASE para avaliar o preço de cada produto e atribuir uma categoria correspondente. Se o preço for maior que 1000, ele é classificado como “Premium”. Se estiver entre 500 e 1000, é classificado como “High-End”, e assim por diante. Se o preço for menor ou igual a 100, ele é classificado como “Econômico”.

Exemplo 3: Calcular descontos com base na quantidade comprada

Suponha que você tenha uma tabela chamada “vendas” com colunas “id”, “produto” e “quantidade”. Você deseja calcular o desconto aplicado a cada venda com base na quantidade comprada usando a função CASE. Você pode fazer assim:

SELECT producto,
       CASE
           WHEN cantidad >= 100 THEN 0.20
           WHEN cantidad >= 50 THEN 0.15
           WHEN cantidad >= 20 THEN 0.10
           ELSE 0
       END AS descuento
FROM ventas;

Neste exemplo, usamos CASE para avaliar a quantidade comprada de cada produto e calcular o desconto correspondente. Se a quantidade for maior ou igual a 100, será aplicado um desconto de 20%. Se estiver entre 50 e 99, é aplicado um desconto de 15%, e assim por diante. Se a quantidade for inferior a 20, não haverá desconto.

Exemplo 4: Convertendo valores numéricos em intervalos

Imagine que você tem uma tabela chamada “funcionários” com colunas “id”, “nome” e “idade”. Você deseja converter as idades dos funcionários em intervalos usando a função CASE. Você pode fazer assim:

SELECT nombre,
       CASE
           WHEN edad >= 60 THEN 'Senior'
           WHEN edad >= 40 THEN 'Mediana edad'
           WHEN edad >= 20 THEN 'Joven'
           ELSE 'Menor de edad'
       END AS rango_edad
FROM empleados;

Neste exemplo, usamos CASE para avaliar a idade de cada funcionário e atribuir um intervalo correspondente. Se a idade for maior ou igual a 60 anos, é classificado como "Sênior". Se você tem entre 40 e 59 anos, você é classificado como “meia-idade”, e assim por diante. Se a idade for inferior a 20 anos, é classificado como "Menor".

  Vantagens e desvantagens do SQL Server para sua empresa

Exemplo 5: Atribuição de rótulos com base em várias condições

Suponha que você tenha uma tabela chamada “pedidos” com colunas “id”, “cliente”, “total” e “status”. Você deseja atribuir rótulos a cada pedido com base em seu total e status usando a função CASE com várias condições. Você pode fazer assim:

SELECT cliente,
       CASE
           WHEN total > 1000 AND estado = 'Entregado' THEN 'VIP'
           WHEN total > 500 AND estado = 'Entregado' THEN 'Prioritario'
           WHEN estado = 'Pendiente' THEN 'En proceso'
           ELSE 'Regular'
       END AS etiqueta
FROM pedidos;

Neste exemplo, usamos CASE com várias condições para avaliar o total e o status de cada pedido e atribuir um rótulo apropriado. Se o total for maior que 1000 e o status for “Entregue”, ele será rotulado como “VIP”. Se o total for maior que 500 e o status for “Entregue”, ele será marcado como “Prioridade”. Se o status for “Pendente”, ele será rotulado como “Em processamento”. Caso contrário, é rotulado como “Regular”.

Exemplo 6: Manipulando valores nulos com CASE

Imagine que você tem uma tabela chamada “clientes” com colunas “id”, “nome” e “email”. Alguns clientes podem não ter um e-mail registrado, o que resultaria em valores nulos na coluna “e-mail”. Você pode usar a função CASE para manipular esses valores nulos adequadamente. Por exemplo:

SELECT nombre,
       CASE
           WHEN email IS NULL THEN 'Sin correo electrónico'
           ELSE email
       END AS informacion_contacto
FROM clientes;

Neste exemplo, usamos CASE para avaliar se a coluna “email” é nula. Se nulo, o texto “Sem e-mail” é exibido. Caso contrário, o valor real da coluna "email" será exibido. Isso nos permite lidar com elegância com casos em que informações de contato estão faltando.

Exemplo 7: Combinando CASE com funções agregadas

A função CASE também pode ser combinada com funções agregadas, como SUM, AVG, COUNT, etc. Suponha que você tenha uma tabela chamada “vendas” com colunas “id”, “produto”, “quantidade” e “preço”. Você quer calcular o total de vendas por categoria de produto usando CASE e SUM. Você pode fazer assim:

SELECT
    SUM(CASE WHEN precio > 1000 THEN cantidad ELSE 0 END) AS ventas_premium,
    SUM(CASE WHEN precio <= 1000 THEN cantidad ELSE 0 END) AS ventas_regulares
FROM ventas;

Neste exemplo, usamos CASE dentro da função SUM para calcular o total de vendas por categoria de produto. Se o preço for maior que 1000, o valor é adicionado a “premium_sales”. Se o preço for menor ou igual a 1000, o valor é adicionado a “regular_sales”. Isso nos permite obter subtotais com base em condições específicas.

Exemplo 8: Usando CASE em cláusulas WHERE

A função CASE também pode ser usada na cláusula WHERE para filtrar registros com base em condições específicas. Suponha que você tenha uma tabela chamada “funcionários” com colunas “id”, “nome”, “departamento” e “salário”. Você quer atingir funcionários cujo salário esteja acima da média do seu departamento. Você pode fazer assim:

SELECT nombre, departamento, salario
FROM empleados
WHERE salario > (
    SELECT AVG(CASE WHEN e.departamento = empleados.departamento THEN e.salario ELSE NULL END)
    FROM empleados e
);

Neste exemplo, usamos CASE na subconsulta para calcular o salário médio por departamento. A subconsulta compara o departamento de cada funcionário com o departamento atual e considera apenas os salários dos funcionários do mesmo departamento para calcular a média. Em seguida, na consulta principal, filtramos os funcionários cujo salário é maior que a média calculada para seu departamento.

Exemplo 9: Gerando colunas calculadas com CASE

A função CASE também pode ser usada para gerar colunas calculadas com base em condições específicas. Suponha que você tenha uma tabela chamada “pedidos” com colunas “id”, “cliente”, “total” e “data”. Você deseja criar uma coluna adicional chamada “desconto” que aplica diferentes porcentagens de desconto dependendo do total do pedido. Você pode fazer assim:

SELECT id, cliente, total,
       CASE
           WHEN total > 1000 THEN total * 0.10
           WHEN total > 500 THEN total * 0.05
           ELSE 0
       END AS descuento,
       fecha
FROM pedidos;

Neste exemplo, usamos CASE para gerar a coluna “desconto” calculada. Se o pedido total for maior que 1000, será aplicado um desconto de 10%. Se o total for maior que 500, será aplicado um desconto de 5%. Em qualquer outro caso, nenhum desconto se aplica. Esta coluna calculada pode ser usada para análises posteriores ou para exibir informações adicionais nos resultados da consulta.

  Design de banco de dados para aplicativos: melhores práticas

Exemplo 10: Implementando lógica complexa com instruções CASE aninhadas

Em alguns casos, pode ser necessário implementar uma lógica condicional mais complexa usando instruções CASE aninhadas. Suponha que você tenha uma tabela chamada “alunos” com colunas “id”, “nome”, “nota_matemática” e “nota_idioma”. Você quer atribuir uma categoria a cada aluno com base em suas notas em matemática e linguagem. Você pode fazer assim:

SELECT nombre,
       CASE
           WHEN nota_matematicas >= 90 AND nota_lenguaje >= 90 THEN 'Excelente'
           WHEN nota_matematicas >= 80 AND nota_lenguaje >= 80 THEN 'Notable'
           ELSE
               CASE
                   WHEN nota_matematicas >= 70 OR nota_lenguaje >= 70 THEN 'Regular'
                   ELSE 'Necesita mejorar'
               END
       END AS categoria
FROM estudiantes;

Neste exemplo, usamos instruções CASE aninhadas para implementar lógica condicional mais complexa. Primeiro, avaliamos se as notas de matemática e de linguagem são maiores ou iguais a 90. Se sim, a categoria “Excelente” é atribuída. Em seguida, avaliamos se ambas as notas são maiores ou iguais a 80. Se sim, a categoria “Notável” é atribuída. Se nenhuma das condições acima for atendida, passamos para o próximo nível de CASE aninhado. Aqui, avaliamos se pelo menos uma das notas (matemática ou linguagem) é maior ou igual a 70. Se sim, a categoria “Regular” é atribuída. Se nenhuma das condições for atendida, a categoria “Necessita de Melhoria” será atribuída.

Exemplo 11: Otimizando consultas com CASE

A função CASE também pode ser usada para otimizar consultas e evitar múltiplas consultas separadas. Suponha que você tenha uma tabela chamada “vendas” com colunas “id”, “produto”, “quantidade” e “data”. Você deseja obter o total de vendas por mês e o total de vendas por ano em uma única consulta. Você pode fazer assim:

SELECT
    SUM(CASE WHEN MONTH(fecha) = 1 THEN cantidad ELSE 0 END) AS ventas_enero,
    SUM(CASE WHEN MONTH(fecha) = 2 THEN cantidad ELSE 0 END) AS ventas_febrero,
    -- ... (continúa para los demás meses)
    SUM(CASE WHEN YEAR(fecha) = 2022 THEN cantidad ELSE 0 END) AS ventas_2022,
    SUM(CASE WHEN YEAR(fecha) = 2023 THEN cantidad ELSE 0 END) AS ventas_2023
FROM ventas;

Neste exemplo, usamos CASE dentro da função SUM para calcular os totais de vendas por mês e por ano em uma única consulta. Para cada mês, avaliamos se o mês da data da venda corresponde ao mês específico e adicionamos o valor correspondente. Da mesma forma, para cada ano, avaliamos se o ano da data da venda corresponde ao ano específico e adicionamos o valor correspondente. Isso nos permite obter todos os totais em uma consulta eficiente.

Melhores práticas ao usar CASE no MySQL

  • Use CASE somente quando necessário e evite usá-lo em excesso, pois ele pode afetar o desempenho da consulta se usado em excesso.
  • Tente manter as expressões CASE o mais simples e legíveis possível. Se a lógica se tornar muito complexa, considere dividi-la em várias expressões CASE ou usar subconsultas.
  • Use CASE em combinação com outras cláusulas e funções do MySQL para aproveitar ao máximo seu potencial, como em WHERE, ORDER BY, GROUP BY e funções de agregação.
  • Tenha cuidado ao aninhar várias expressões CASE, pois isso pode dificultar a leitura e a manutenção do seu código. Se necessário, adicione comentários explicativos.

Erros comuns ao usar CASE e como evitá-los

  • Esqueça a cláusula ELSE: Certifique-se de incluir a cláusula ELSE para lidar com casos em que nenhuma das condições é atendida. Se não for especificado, NULL será atribuído por padrão.
  • Não termine a expressão CASE com END: Lembre-se de sempre terminar a expressão CASE com a palavra-chave END. Caso contrário, você receberá um erro de sintaxe.
  • Usando tipos de dados incompatíveis: Certifique-se de que os resultados retornados por cada condição WHEN sejam do mesmo tipo de dados. Se você misturar tipos de dados, poderá obter resultados inesperados ou erros.
  • Não considerando a ordem das condições: As condições em CASE são avaliadas na ordem em que aparecem. Certifique-se de colocar as condições mais específicas antes das mais gerais para obter os resultados desejados.
  O que um desenvolvedor de banco de dados faz?

Alternativas ao CASE no MySQL

Embora CASE seja uma função poderosa, existem algumas alternativas que você pode considerar em certos casos:

  • Expressões IF: A Função IF no MySQL permite que você avalie uma condição e retorne um valor se a condição for verdadeira e outro valor se for falsa. É uma alternativa mais simples para casos de condições únicas.
  • Tabelas de pesquisa: Em alguns casos, você pode usar tabelas de pesquisa separadas para armazenar as condições e os resultados correspondentes. Você pode então unir essas tabelas com a tabela principal para obter os resultados desejados.
  • Visualizações ou funções armazenadas: Se você tiver consultas complexas que usam CASE de forma recorrente, considere criar visualizações ou funções armazenadas para encapsular essa lógica e simplificar consultas subsequentes.

Perguntas frequentes sobre CASE no MySQL

1. Posso usar CASE em combinação com outras funções do MySQL?

Sim, você pode usar CASE em combinação com outras funções do MySQL, como funções de agregação (SUM, AVG, COUNT, etc.), funções de data e hora (YEAR, MONTH, DAY, etc.), funções de string (CONCAT, SUBSTRING, LENGTH, etc.) e muito mais.

2. Existe um limite para o número de condições WHEN que posso usar em uma expressão CASE?

Não há limite específico para o número de condições WHEN que você pode usar em uma expressão CASE. No entanto, tenha em mente que um grande número de condições pode afetar a legibilidade do código e o desempenho da consulta. Se você tiver muitas condições, considere simplificar a lógica ou dividi-la em várias expressões CASE.

3. Posso usar subconsultas dentro de uma expressão CASE?

Sim, você pode usar subconsultas dentro de uma expressão CASE, tanto em condições WHEN quanto em resultados THEN. Isso permite que você execute cálculos ou comparações mais complexas com base nos resultados de outras consultas.

4. Como posso lidar com valores nulos em uma expressão CASE?

Você pode manipular valores nulos em uma expressão CASE usando a condição IS NULL ou IS NOT NULL. Por exemplo, você pode usar CASE WHEN column IS NULL THEN 'Null value' ELSE column END para atribuir um valor específico quando a coluna for nula e retornar o valor real quando não for.

Conclusões de Casos em Mysql

A função CASE no MySQL é uma ferramenta poderosa e versátil que permite executar operações condicionais em suas consultas. Com o CASE, você pode avaliar diferentes condições e retornar resultados específicos dependendo se essas condições são atendidas ou não. Os exemplos apresentados neste artigo fornecem uma base sólida para começar a usar CASE em suas próprias consultas e adaptá-lo às suas necessidades específicas.

Lembre-se de seguir as melhores práticas ao usar CASE, como manter as expressões simples e legíveis, usar CASE em combinação com outras cláusulas e funções do MySQL e considerar alternativas quando apropriado. Com prática e experimentação, você poderá aproveitar ao máximo o CASE no MySQL e melhorar a eficiência e a legibilidade de suas consultas.

Se você tiver alguma dúvida adicional ou precisar de mais exemplos, sinta-se à vontade para procurar recursos adicionais ou consultar a documentação oficial do MySQL. Continue explorando e aproveitando o poder do CASE em seus projetos de banco de dados!

Recursos adicionais: