Met de MySQL Case-instructie kunt u een waarde voor meerdere voorwaarden in een SQL-query controleren. In dit artikel zullen we bekijken hoe u case-statements kunt gebruiken in MySQL.
Hoe een casusverklaring in MySQL te schrijven
Hier is de syntaxis voor de MySQL Case-instructie.
select
case
when condition1 then value1
when condition2 then value2
...
end,
column2, column3, ...
from table_name In de bovenstaande query moet u de tabelnaam opgeven. Ook moet u elke voorwaarde vermelden waarvoor u een bepaalde kolom wilt controleren, binnen case... end statement. U moet ook de waarde vermelden die aan de kolom moet worden toegewezen als elke voorwaarde waar is, dat wil zeggen voor elk geval.
MySQL-voorbeeldvoorbeelden
Laten we eens kijken naar enkele voorbeelden van de MySQL Case-functie hieronder.
Stel dat u de volgende tabel verkoop(id, order_date, bedrag) . heeft .
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 gelezen:Hoe JSON-kolom op te vragen in MySQL
Hier is de SQL-query om het bedrag te groeperen waarden in 3 buckets – minder dan gelijk aan 100, 100-300 en meer dan 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 gelezen:Hoe te voorkomen dat dubbele records in MySQL worden ingevoegd
Houd er rekening mee dat als aan geen van de case-statements is voldaan voor een waarde, het CASE-statement NULL retourneert. Hier is een voorbeeld
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 |
+------+------------+------------------+
In het bovenstaande voorbeeld retourneert de CASE-instructie NULL voor 100, omdat deze aan geen van de voorwaarden voldoet.
MySQL Case-instructie is handig voor het maken van frequentieverdelingen en groeperingswaarden.
U kunt ook de WHERE-voorwaarde gebruiken om een case-statement op een subset van rijen toe te passen.
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>;
MySQL-hoesje in Ubiq
Ubiq Reporting-tool ondersteunt alle bovenstaande SQL-query's en maakt het gemakkelijk om SQL-resultaten op verschillende manieren te visualiseren. Hier is de hierboven genoemde CASE SQL-query, in Ubiq.
Een rapportagetool voor MySQL nodig? Ubiq maakt het gemakkelijk om gegevens binnen enkele minuten te visualiseren en in realtime dashboards te monitoren. Probeer het vandaag nog!