Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como usar a instrução CASE no MySQL


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!