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!