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!