Câu lệnh MySQL Case cho phép bạn kiểm tra một giá trị cho nhiều điều kiện trong một truy vấn SQL. Trong bài viết này, chúng ta sẽ xem xét cách sử dụng câu lệnh trường hợp trong MySQL.
Cách viết câu lệnh tình huống trong MySQL
Đây là cú pháp cho câu lệnh MySQL Case.
select case when condition1 then value1 when condition2 then value2 ... end, column2, column3, ... from table_name
Trong truy vấn trên, bạn cần chỉ định tên bảng. Ngoài ra, bạn cần phải đề cập đến từng điều kiện mà bạn muốn kiểm tra một cột nhất định, trong trường hợp… kết thúc câu lệnh. Bạn cũng cần phải đề cập đến giá trị được gán cho cột nếu mỗi điều kiện là đúng, nghĩa là đối với từng trường hợp.
Ví dụ về MySQL Case
Hãy cùng chúng tôi xem xét một số ví dụ về hàm MySQL Case bên dưới.
Giả sử bạn có bảng sau doanh số bán hàng (id, order_date, amount) .
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 | +------+------------+--------+
Phần thưởng đã đọc:Cách truy vấn cột JSON trong MySQL
Đây là truy vấn SQL để nhóm số tiền giá trị thành 3 nhóm - nhỏ hơn 100, 100-300 và hơn 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 | +------+------------+------------------------+
Phần thưởng đọc:Cách Tránh chèn các bản ghi trùng lặp trong MySQL
Xin lưu ý, nếu không có câu lệnh trường hợp nào được thỏa mãn cho một giá trị, thì câu lệnh CASE sẽ trả về NULL. Đây là một ví dụ
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 | +------+------------+------------------+
Trong ví dụ trên, câu lệnh CASE trả về giá trị NULL cho 100, vì nó không thỏa mãn bất kỳ điều kiện nào.
Câu lệnh MySQL Case hữu ích để tạo phân phối tần số và nhóm các giá trị.
Bạn cũng có thể sử dụng điều kiện WHERE để áp dụng câu lệnh trường hợp trên một tập hợp con các hàng.
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>;
Trường hợp MySQL trong Ubiq
Công cụ Báo cáo Ubiq hỗ trợ tất cả các truy vấn SQL ở trên và giúp bạn dễ dàng hình dung kết quả SQL theo những cách khác nhau. Đây là truy vấn SQL CASE được đề cập ở trên, trong Ubiq.
Cần một công cụ báo cáo cho MySQL? Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!