A instrução MySQL Case permite que você verifique um valor para várias condições em uma consulta SQL. Neste artigo, veremos como usar a instrução case no MySQL.
Como escrever instruções de caso no MySQL
Aqui está a sintaxe para a instrução MySQL Case.
select
case
when condition1 then value1
when condition2 then value2
...
end,
column2, column3, ...
from table_name Na consulta acima, você precisa especificar o nome da tabela. Além disso, você precisa mencionar cada condição para a qual deseja verificar uma determinada coluna, dentro da instrução case… end. Você também precisa mencionar o valor a ser atribuído à coluna se cada condição for verdadeira, ou seja, para cada caso.
Exemplos de caso MySQL
Vejamos alguns exemplos da função MySQL Case abaixo.
Digamos que você tenha a seguinte tabela sales(id, order_date, amount) .
mysql> create table sales(id int, order_date date, amount int);
mysql> insert into sales(id, order_date, amount)
values(1, '2021-01-01', 150),
(1, '2021-01-02', 250),
(1, '2021-01-03', 100),
(1, '2021-01-04', 150),
(1, '2021-01-05', 350);
mysql> select * from sales;
+------+------------+--------+
| id | order_date | amount |
+------+------------+--------+
| 1 | 2021-01-01 | 150 |
| 1 | 2021-01-02 | 250 |
| 1 | 2021-01-03 | 100 |
| 1 | 2021-01-04 | 150 |
| 1 | 2021-01-05 | 350 |
+------+------------+--------+ Leitura bônus:Como consultar a coluna JSON no MySQL
Aqui está a consulta SQL para agrupar a quantidade valores em 3 buckets – menor que igual a 100, 100-300 e maior que 300.
mysql> select id, order_date,
case when amount<=100 then 'less than equal to 100'
when amount>100 and amount<300 then '101 to 300'
when amount>=300 then 'greater than 300'
end as bucket
from sales;
+------+------------+------------------------+
| id | order_date | bucket |
+------+------------+------------------------+
| 1 | 2021-01-01 | 101 to 300 |
| 1 | 2021-01-02 | 101 to 300 |
| 1 | 2021-01-03 | less than equal to 100 |
| 1 | 2021-01-04 | 101 to 300 |
| 1 | 2021-01-05 | greater than 300 |
+------+------------+------------------------+
Bônus de leitura:Como evitar a inserção de registros duplicados no MySQL
Observe que, se nenhuma das instruções case for satisfeita para um valor, a instrução CASE retornará NULL. Aqui está um exemplo
mysql> select id, order_date,
case when amount<100 then 'less than 100'
when amount>100 and amount<300 then '100 to 300'
when amount>300 then 'greater than 300'
end as bucket
from sales;
+------+------------+------------------+
| id | order_date | bucket |
+------+------------+------------------+
| 1 | 2021-01-01 | 100 to 300 |
| 1 | 2021-01-02 | 100 to 300 |
| 1 | 2021-01-03 | NULL |
| 1 | 2021-01-04 | 100 to 300 |
| 1 | 2021-01-05 | greater than 300 |
+------+------------+------------------+
No exemplo acima, a instrução CASE retorna NULL para 100, pois não atende a nenhuma das condições.
A instrução MySQL Case é útil para criar distribuições de frequência e valores de agrupamento.
Você também pode usar a condição WHERE para aplicar a instrução case em um subconjunto de linhas.
select id, order_date,
case when amount<=100 then 'less than equal to 100'
when amount>100 and amount<300 then '101 to 300'
when amount>=300 then 'greater than 300'
end as bucket
from sales
WHERE <condition>; Caso MySQL no Ubiq
A ferramenta Ubiq Reporting suporta todas as consultas SQL acima e facilita a visualização dos resultados SQL de diferentes maneiras. Aqui está a consulta CASE SQL mencionada acima, no Ubiq.
Precisa de uma ferramenta de relatório para MySQL? O Ubiq facilita a visualização de dados em minutos e o monitoramento em painéis em tempo real. Experimente hoje!