sql >> Base de Datos >  >> RDS >> Mysql

Cómo usar la declaración CASE en MySQL

La declaración MySQL Case le permite verificar un valor para múltiples condiciones en una consulta SQL. En este artículo, veremos cómo usar la declaración de caso en MySQL.


Cómo escribir declaraciones de casos en MySQL

Aquí está la sintaxis para la declaración MySQL Case.

select 
case 
    when condition1 then value1
    when condition2 then value2
    ...
end,
column2, column3, ...
from table_name

En la consulta anterior, debe especificar el nombre de la tabla. También debe mencionar cada condición para la que desea verificar una columna determinada, dentro del caso ... declaración final. También es necesario mencionar el valor que se asignará a la columna si cada condición es verdadera, es decir, para cada caso.

Ejemplos de casos MySQL

Veamos algunos ejemplos de la función MySQL Case a continuación.

Digamos que tiene la siguiente tabla ventas (id, order_date, cantidad) .

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 |
+------+------------+--------+

Lectura adicional:Cómo consultar la columna JSON en MySQL

Aquí está la consulta SQL para agrupar la cantidad valores en 3 cubos:menos que igual a 100, 100-300 y más de 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       |
+------+------------+------------------------+

Lectura adicional:Cómo evitar la inserción de registros duplicados en MySQL

Tenga en cuenta que si ninguna de las declaraciones de caso se cumple para un valor, entonces la declaración CASE devolverá NULL. He aquí un ejemplo

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 |
+------+------------+------------------+

En el ejemplo anterior, la instrucción CASE devuelve NULL para 100, ya que no cumple ninguna de las condiciones.

La instrucción MySQL Case es útil para crear distribuciones de frecuencia y agrupar valores.

También puede usar la condición WHERE para aplicar la declaración de caso en un subconjunto de filas.

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 en Ubiq

La herramienta Ubiq Reporting admite todas las consultas SQL anteriores y facilita la visualización de los resultados SQL de diferentes maneras. Aquí está la consulta CASE SQL mencionada anteriormente, en Ubiq.

¿Necesita una herramienta de informes para MySQL? Ubiq facilita la visualización de datos en minutos y el monitoreo en paneles en tiempo real. ¡Pruébalo hoy!