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!