Mysql
 sql >> Database >  >> RDS >> Mysql

Come utilizzare l'istruzione CASE in MySQL

L'istruzione MySQL Case consente di controllare un valore per più condizioni in una query SQL. In questo articolo vedremo come utilizzare l'istruzione case in MySQL.


Come scrivere una dichiarazione del caso in MySQL

Ecco la sintassi per l'istruzione MySQL Case.

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

Nella query precedente, è necessario specificare il nome della tabella. Inoltre è necessario menzionare ogni condizione per la quale si desidera controllare una determinata colonna, all'interno di case... end statement. Devi anche menzionare il valore da assegnare alla colonna se ogni condizione è vera, cioè per ogni caso.

Esempi di casi MySQL

Diamo un'occhiata ad alcuni esempi di funzione MySQL Case di seguito.

Supponiamo che tu abbia la seguente tabella vendite(id, data_ordine, importo) .

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

Bonus letto:come interrogare la colonna JSON in MySQL

Ecco la query SQL per raggruppare l'importo valori in 3 bucket:inferiore a uguale a 100, 100-300 e superiore a 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       |
+------+------------+------------------------+

Bonus letto:come evitare di inserire record duplicati in MySQL

Si noti che se nessuna delle istruzioni case è soddisfatta per un valore, l'istruzione CASE restituirà NULL. Ecco un esempio

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

Nell'esempio precedente, l'istruzione CASE restituisce NULL per 100, poiché non soddisfa nessuna delle condizioni.

L'istruzione MySQL Case è utile per creare distribuzioni di frequenza e raggruppare valori.

Puoi anche utilizzare la condizione WHERE per applicare l'istruzione case su un sottoinsieme di righe.

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

Lo strumento Ubiq Reporting supporta tutte le query SQL di cui sopra e semplifica la visualizzazione dei risultati SQL in diversi modi. Ecco la query CASE SQL menzionata sopra, in Ubiq.

Hai bisogno di uno strumento di reporting per MySQL? Ubiq semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!