Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách sử dụng câu lệnh CASE trong MySQL

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!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các truy vấn mysql động với sql thoát có an toàn như các câu lệnh đã chuẩn bị không?

  2. Tìm vĩ độ / kinh độ gần nhất bằng truy vấn SQL

  3. Biểu tượng cảm xúc iPhone chèn vào MySQL nhưng trở thành giá trị trống

  4. Xử lý lịch ngày và dấu thời gian của MySQL trong Java

  5. Sắp xếp trong MySQL bằng cách sử dụng thứ tự theo mệnh đề