Hướng dẫn when case in mysql query? - trường hợp nào trong truy vấn mysql?

Thí dụ

Trải qua các điều kiện và trả về một giá trị khi điều kiện đầu tiên được đáp ứng:

Show

Chọn orderID, số lượng, trường hợp & nbsp; & nbsp; & nbsp; Khi số lượng> 30 thì "Số lượng lớn hơn 30" & nbsp; & nbsp; & nbsp; Khi số lượng = 30 thì "Số lượng là 30" & nbsp; & nbsp; & nbsp; Khác "Số lượng dưới 30" endFrom orderDetails;
CASE
    WHEN Quantity > 30 THEN "The quantity is greater than 30"
    WHEN Quantity = 30 THEN "The quantity is 30"
    ELSE "The quantity is under 30"
END
FROM OrderDetails;

Hãy tự mình thử »


Định nghĩa và cách sử dụng

Tuyên bố trường hợp trải qua các điều kiện và trả về một giá trị khi điều kiện đầu tiên được đáp ứng (như một câu lệnh if-then-else). Vì vậy, một khi một điều kiện là đúng, nó sẽ ngừng đọc và trả về kết quả.

Nếu không có điều kiện nào là đúng, nó sẽ trả về giá trị trong mệnh đề khác.

Nếu không có phần khác và không có điều kiện nào là đúng, nó sẽ trả lại null.

Cú pháp

Trường hợp & nbsp; & nbsp; & nbsp; Khi điều kiện1 thì kết quả1 & nbsp; & nbsp; & nbsp; Khi điều kiện2 thì result2 & nbsp; & nbsp; & nbsp; Khi điều kiện sau đó kết quả & nbsp; & nbsp; & nbsp; Kết quả khác;
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END;

Giá trị tham số

Tham sốSự mô tả
điều kiện1, điều kiện2, ... điều kiệnYêu cầu. Điều kiện. Chúng được đánh giá theo thứ tự giống như chúng được liệt kê
Kết quả1, kết quả2, ... kết quảYêu cầu. Giá trị để trả lại sau khi một điều kiện là đúng

Chi tiết kỹ thuật

Hoạt động trong:Từ MySQL 4.0

Nhiều ví dụ hơn

SQL sau đây sẽ đặt hàng khách hàng theo thành phố. Tuy nhiên, nếu City là NULL, thì hãy đặt hàng theo quốc gia:

Thí dụ

Chọn Tên tùy chỉnh, Thành phố, CountryFrom Khách hàng theo (Case & NBSP; & NBSP; & NBSP; Khi Thành phố là NULL sau đó là Quốc gia & NBSP; & NBSP; & NBSP; khác CityEnd);
FROM Customers
ORDER BY
(CASE
    WHEN City IS NULL THEN Country
    ELSE City
END);

Hãy tự mình thử »




Tuyên bố trường hợp MySQL

Câu lệnh CASE trải qua các điều kiện và trả về một giá trị khi điều kiện đầu tiên được đáp ứng (giống như một câu lệnh if-then-else). Vì vậy, một khi một điều kiện là đúng, nó sẽ ngừng đọc và trả về kết quả. Nếu không có điều kiện nào là đúng, nó sẽ trả về giá trị trong mệnh đề ELSE.

Nếu không có phần ELSE và không có điều kiện nào là đúng, nó sẽ trả về null.

COLTAX TRƯỜNG HỢP

Trường hợp & nbsp; & nbsp; & nbsp; Khi điều kiện1 thì kết quả1 & nbsp; & nbsp; & nbsp; Khi điều kiện2 thì result2 & nbsp; & nbsp; & nbsp; Khi điều kiện sau đó kết quả & nbsp; & nbsp; & nbsp; Kết quả khác;
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END;


Cơ sở dữ liệu demo

Dưới đây là một lựa chọn từ bảng "OrderDetails" trong cơ sở dữ liệu mẫu Northwind:

OrderDetailidOrderIDID sản phẩmSố lượng
1 10248 11 12
2 10248 42 10
3 10248 72 5
4 10249 14 9
5 10249 51 40



Ví dụ trường hợp MySQL

SQL sau đây trải qua các điều kiện và trả về giá trị khi đáp ứng điều kiện đầu tiên:

Thí dụ

Chọn orderID, số lượng, trường hợp & nbsp; & nbsp; & nbsp; Khi số lượng> 30 thì 'số lượng lớn hơn 30' & nbsp; & nbsp; & nbsp; Khi số lượng = 30 thì 'Số lượng là 30' & nbsp; & nbsp; & nbsp; Khác 'số lượng dưới 30'end dưới dạng số lượng orderdetails;
CASE
    WHEN Quantity > 30 THEN 'The quantity is greater than 30'
    WHEN Quantity = 30 THEN 'The quantity is 30'
    ELSE 'The quantity is under 30'
END AS QuantityText
FROM OrderDetails;

Hãy tự mình thử »

SQL sau đây sẽ đặt hàng khách hàng theo thành phố. Tuy nhiên, nếu City là NULL, thì hãy đặt hàng theo quốc gia:

Thí dụ

Chọn orderID, số lượng, trường hợp & nbsp; & nbsp; & nbsp; Khi số lượng> 30 thì 'số lượng lớn hơn 30' & nbsp; & nbsp; & nbsp; Khi số lượng = 30 thì 'Số lượng là 30' & nbsp; & nbsp; & nbsp; Khác 'số lượng dưới 30'end dưới dạng số lượng orderdetails;
FROM Customers
ORDER BY
(CASE
    WHEN City IS NULL THEN Country
    ELSE City
END);

Hãy tự mình thử »



Chúng ta có thể viết trường hợp trong điều kiện ở đâu không?: in this tutorial, you will learn how to use the MySQL CASE expression to add if-else logic to queries.

Một cách khác để sử dụng câu lệnh trường hợp là trong mệnh đề WHERE. Ở đó, nó có thể được sử dụng để thay đổi dữ liệu được tìm nạp bởi một truy vấn dựa trên một điều kiện. Trong bối cảnh đó, tuyên bố trường hợp phù hợp lý tưởng với cả các truy vấn tĩnh, cũng như các truy vấn động, chẳng hạn như những câu hỏi mà bạn sẽ tìm thấy bên trong một quy trình được lưu trữ.

Tóm tắt: Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng biểu thức MySQL CASE để thêm logic if-else vào truy vấn.

Giới thiệu về biểu thức MySQL CASE

Biểu thức MySQL CASE là cấu trúc luồng điều khiển cho phép bạn thêm logic if-else vào truy vấn. Nói chung, bạn có thể sử dụng biểu thức CASE ở bất cứ đâu cho phép biểu thức hợp lệ, ví dụ:

CASE WHEN expression1 THEN result1 WHEN expression2 THEN result2 … [ELSE else_result] END

Code language: SQL (Structured Query Language) (sql)
3,

CASE WHEN expression1 THEN result1 WHEN expression2 THEN result2 … [ELSE else_result] END

Code language: SQL (Structured Query Language) (sql)
4 và

CASE WHEN expression1 THEN result1 WHEN expression2 THEN result2 … [ELSE else_result] END

Code language: SQL (Structured Query Language) (sql)
5.

Biểu thức CASE có hai dạng: đơn giản CASE và tìm kiếm CASE.

Lưu ý rằng MySQL có tuyên bố CASE mà bạn chỉ có thể sử dụng trong các chương trình được lưu trữ như quy trình lưu trữ, chức năng được lưu trữ, sự kiện và trình kích hoạt, không phải là biểu thức CASE được đề cập trong hướng dẫn này.

CASE value WHEN value1 THEN result1 WHEN value2 THEN result2 … [ELSE else_result] END

Code language: SQL (Structured Query Language) (sql)

Biểu thức CASE đơn giản

Sau đây minh họa cú pháp của đơn giản & nbsp; CASE Biểu thức:

Trong cú pháp này, CASE phù hợp với giá trị với SELECT customerName, COUNT(*) orderCount FROM orders INNER JOIN customers USING (customerNumber) GROUP BY customerName ORDER BY COUNT(*);Code language: SQL (Structured Query Language) (sql)4, SELECT customerName, COUNT(*) orderCount FROM orders INNER JOIN customers USING (customerNumber) GROUP BY customerName ORDER BY COUNT(*);Code language: SQL (Structured Query Language) (sql)5, v.v., cho sự bình đẳng và trả về SELECT customerName, COUNT(*) orderCount FROM orders INNER JOIN customers USING (customerNumber) GROUP BY customerName ORDER BY COUNT(*);Code language: SQL (Structured Query Language) (sql)6, ________ 27, Điều khoản ELSE được chỉ định.

CASE so sánh

SELECT customerName, COUNT(*) orderCount FROM orders INNER JOIN customers USING (customerNumber) GROUP BY customerName ORDER BY COUNT(*);

Code language: SQL (Structured Query Language) (sql)
8 với

WITH cte AS ( SELECT customerName, COUNT(*) orderCount FROM orders INNER JOIN customers USING (customerNumber) GROUP BY customerName ) SELECT customerName, orderCount, CASE orderCount WHEN 1 THEN 'One-time Customer' WHEN 2 THEN 'Repeated Customer' WHEN 3 THEN 'Frequent Customer' ELSE 'Loyal Customer' end customerType FROM cte ORDER BY customerName;

Code language: SQL (Structured Query Language) (sql)
6 trong các mệnh đề

WITH cte AS ( SELECT customerName, COUNT(*) orderCount FROM orders INNER JOIN customers USING (customerNumber) GROUP BY customerName ) SELECT customerName, orderCount, CASE orderCount WHEN 1 THEN 'One-time Customer' WHEN 2 THEN 'Repeated Customer' WHEN 3 THEN 'Frequent Customer' ELSE 'Loyal Customer' end customerType FROM cte ORDER BY customerName;

Code language: SQL (Structured Query Language) (sql)
7 cho sự bình đẳng, bạn không thể sử dụng nó với

WITH cte AS ( SELECT customerName, COUNT(*) orderCount FROM orders INNER JOIN customers USING (customerNumber) GROUP BY customerName ) SELECT customerName, orderCount, CASE orderCount WHEN 1 THEN 'One-time Customer' WHEN 2 THEN 'Repeated Customer' WHEN 3 THEN 'Frequent Customer' ELSE 'Loyal Customer' end customerType FROM cte ORDER BY customerName;

Code language: SQL (Structured Query Language) (sql)
8 vì

WITH cte AS ( SELECT customerName, COUNT(*) orderCount FROM orders INNER JOIN customers USING (customerNumber) GROUP BY customerName ) SELECT customerName, orderCount, CASE orderCount WHEN 1 THEN 'One-time Customer' WHEN 2 THEN 'Repeated Customer' WHEN 3 THEN 'Frequent Customer' ELSE 'Loyal Customer' end customerType FROM cte ORDER BY customerName;

Code language: SQL (Structured Query Language) (sql)
9 trả về sai.

CASE WHEN expression1 THEN result1 WHEN expression2 THEN result2 … [ELSE else_result] END

Code language: SQL (Structured Query Language) (sql)

Đã tìm kiếm biểu thức CASE

Sau đây cho thấy cú pháp của biểu thức CASE được tìm kiếm:

Trong cú pháp này, CASE đánh giá các biểu thức được chỉ định trong các mệnh đề ____37. Nếu một biểu thức đánh giá là đúng. Trường hợp trả về kết quả tương ứng trong mệnh đề SELECT customerName, state, country FROM customers ORDER BY ( CASE WHEN state IS NULL THEN country ELSE state END);Code language: SQL (Structured Query Language) (sql)4. Mặt khác, nó trả về kết quả được chỉ định trong mệnh đề ELSE. Trong trường hợp mệnh đề ELSE không có sẵn, thì biểu thức CASE trả về WITH cte AS ( SELECT customerName, COUNT(*) orderCount FROM orders INNER JOIN customers USING (customerNumber) GROUP BY customerName ) SELECT customerName, orderCount, CASE orderCount WHEN 1 THEN 'One-time Customer' WHEN 2 THEN 'Repeated Customer' WHEN 3 THEN 'Frequent Customer' ELSE 'Loyal Customer' end customerType FROM cte ORDER BY customerName;Code language: SQL (Structured Query Language) (sql)8.

Biểu thức CASE trả về một kết quả mà loại dữ liệu phụ thuộc vào ngữ cảnh nơi nó được sử dụng. Ví dụ: nếu biểu thức CASE được sử dụng trong bối cảnh chuỗi ký tự, nó sẽ trả về kết quả dưới dạng chuỗi ký tự. Nếu biểu thức CASE được sử dụng trong bối cảnh số, nó sẽ trả về kết quả dưới dạng số nguyên, thập phân hoặc giá trị thực.

Xem bảng

SELECT SUM(CASE WHEN status = 'Shipped' THEN 1 ELSE 0 END) AS 'Shipped', SUM(CASE WHEN status = 'On Hold' THEN 1 ELSE 0 END) AS 'On Hold', SUM(CASE WHEN status = 'In Process' THEN 1 ELSE 0 END) AS 'In Process', SUM(CASE WHEN status = 'Resolved' THEN 1 ELSE 0 END) AS 'Resolved', SUM(CASE WHEN status = 'Cancelled' THEN 1 ELSE 0 END) AS 'Cancelled', SUM(CASE WHEN status = 'Disputed' THEN 1 ELSE 0 END) AS 'Disputed', COUNT(*) AS Total FROM orders;

Code language: SQL (Structured Query Language) (sql)
5 và

SELECT SUM(CASE WHEN status = 'Shipped' THEN 1 ELSE 0 END) AS 'Shipped', SUM(CASE WHEN status = 'On Hold' THEN 1 ELSE 0 END) AS 'On Hold', SUM(CASE WHEN status = 'In Process' THEN 1 ELSE 0 END) AS 'In Process', SUM(CASE WHEN status = 'Resolved' THEN 1 ELSE 0 END) AS 'Resolved', SUM(CASE WHEN status = 'Cancelled' THEN 1 ELSE 0 END) AS 'Cancelled', SUM(CASE WHEN status = 'Disputed' THEN 1 ELSE 0 END) AS 'Disputed', COUNT(*) AS Total FROM orders;

Code language: SQL (Structured Query Language) (sql)
6 sau:

Hướng dẫn when case in mysql query? - trường hợp nào trong truy vấn mysql?

Tuyên bố sau đây trả về khách hàng và đơn đặt hàng của họ:

SELECT customerName, COUNT(*) orderCount FROM orders INNER JOIN customers USING (customerNumber) GROUP BY customerName ORDER BY COUNT(*);

Code language: SQL (Structured Query Language) (sql)
Ví dụ này sử dụng biểu thức CASE trong Điều khoản

CASE WHEN expression1 THEN result1 WHEN expression2 THEN result2 … [ELSE else_result] END

Code language: SQL (Structured Query Language) (sql)
3 để trả về loại khách hàng dựa trên số lượng đơn đặt hàng mà khách hàng đã đặt hàng:
Hướng dẫn when case in mysql query? - trường hợp nào trong truy vấn mysql?

This example uses the CASE expression in the

CASE WHEN expression1 THEN result1 WHEN expression2 THEN result2 … [ELSE else_result] END

Code language: SQL (Structured Query Language) (sql)
3 clause to return the type of customers based on the number of orders that customers ordered:

WITH cte AS ( SELECT customerName, COUNT(*) orderCount FROM orders INNER JOIN customers USING (customerNumber) GROUP BY customerName ) SELECT customerName, orderCount, CASE orderCount WHEN 1 THEN 'One-time Customer' WHEN 2 THEN 'Repeated Customer' WHEN 3 THEN 'Frequent Customer' ELSE 'Loyal Customer' end customerType FROM cte ORDER BY customerName;

Code language: SQL (Structured Query Language) (sql)
B) Sử dụng biểu thức CASE trong ví dụ mệnh đề

CASE WHEN expression1 THEN result1 WHEN expression2 THEN result2 … [ELSE else_result] END

Code language: SQL (Structured Query Language) (sql)
5
Hướng dẫn when case in mysql query? - trường hợp nào trong truy vấn mysql?

B) Using CASE expression in the CASE WHEN expression1 THEN result1 WHEN expression2 THEN result2 … [ELSE else_result] ENDCode language: SQL (Structured Query Language) (sql)5 clause example

Ví dụ sau đây sử dụng biểu thức CASE để sắp xếp khách hàng theo trạng thái nếu trạng thái không phải là ____ 38, & nbsp; hoặc sắp xếp quốc gia trong trường hợp nhà nước là

WITH cte AS ( SELECT customerName, COUNT(*) orderCount FROM orders INNER JOIN customers USING (customerNumber) GROUP BY customerName ) SELECT customerName, orderCount, CASE orderCount WHEN 1 THEN 'One-time Customer' WHEN 2 THEN 'Repeated Customer' WHEN 3 THEN 'Frequent Customer' ELSE 'Loyal Customer' end customerType FROM cte ORDER BY customerName;

Code language: SQL (Structured Query Language) (sql)
8:

SELECT customerName, state, country FROM customers ORDER BY ( CASE WHEN state IS NULL THEN country ELSE state END);

Code language: SQL (Structured Query Language) (sql)

Thử nó ra

Hướng dẫn when case in mysql query? - trường hợp nào trong truy vấn mysql?

C) Sử dụng biểu thức CASE với ví dụ chức năng tổng hợp

Ví dụ sau sử dụng biểu thức CASE với hàm CASE6 để tính tổng số đơn đặt hàng theo trạng thái đơn hàng:

SELECT SUM(CASE WHEN status = 'Shipped' THEN 1 ELSE 0 END) AS 'Shipped', SUM(CASE WHEN status = 'On Hold' THEN 1 ELSE 0 END) AS 'On Hold', SUM(CASE WHEN status = 'In Process' THEN 1 ELSE 0 END) AS 'In Process', SUM(CASE WHEN status = 'Resolved' THEN 1 ELSE 0 END) AS 'Resolved', SUM(CASE WHEN status = 'Cancelled' THEN 1 ELSE 0 END) AS 'Cancelled', SUM(CASE WHEN status = 'Disputed' THEN 1 ELSE 0 END) AS 'Disputed', COUNT(*) AS Total FROM orders;

Code language: SQL (Structured Query Language) (sql)

Thử nó ra

C) Sử dụng biểu thức CASE với ví dụ chức năng tổng hợp

Hướng dẫn when case in mysql query? - trường hợp nào trong truy vấn mysql?

Ví dụ sau sử dụng biểu thức CASE với hàm CASE6 để tính tổng số đơn đặt hàng theo trạng thái đơn hàng:

  • Đây là đầu ra:
  • Làm thế nào nó hoạt động.

Đầu tiên, câu lệnh CASE trả về 1 nếu trạng thái bằng trạng thái tương ứng như được vận chuyển, bị giữ, trong quá trình, bị hủy, tranh chấp và không.

Thứ hai, hàm CASE6 trả về tổng số đơn đặt hàng cho mỗi trạng thái đơn hàng.

Bạn có thể sử dụng trường hợp khi ở MySQL không?

Trường hợp MySQL thường được sử dụng khi mong muốn đánh giá các giá trị cột đã cho so với các điều kiện đã cho hoặc trả về giá trị tùy chỉnh tùy thuộc vào cột hiện tại có giá trị được đánh giá theo một điều kiện nhất định.when it is desired to evaluate the given column values against given conditions or return a custom value depending on the current column whose values are evaluated against a given condition.

Chúng ta có thể sử dụng trường hợp khi nào hoặc trong SQL không?

Trong SQL, tuyên bố trường hợp trả về kết quả dựa trên đánh giá các điều kiện nhất định. Nó khá linh hoạt và có thể được sử dụng trong các cấu trúc khác nhau. Chẳng hạn, bạn có thể sử dụng nó để hiển thị các giá trị, đặt hàng sắp xếp kết quả hoặc bản ghi lọc.to display values, order sort results, or filter records.

Chúng ta có thể sử dụng câu lệnh CASE trong Truy vấn chọn không?

Tuyên bố trường hợp luôn đi trong mệnh đề chọn.Trường hợp phải bao gồm các thành phần sau: Khi nào, sau đó và kết thúc.Khác là một thành phần tùy chọn.Bạn có thể thực hiện bất kỳ câu lệnh có điều kiện nào bằng cách sử dụng bất kỳ toán tử có điều kiện nào (như ở đâu) giữa khi nào và sau đó.. CASE must include the following components: WHEN , THEN , and END . ELSE is an optional component. You can make any conditional statement using any conditional operator (like WHERE ) between WHEN and THEN .

Chúng ta có thể viết trường hợp trong điều kiện ở đâu không?

Một cách khác để sử dụng câu lệnh trường hợp là trong mệnh đề WHERE.Ở đó, nó có thể được sử dụng để thay đổi dữ liệu được tìm nạp bởi một truy vấn dựa trên một điều kiện.Trong bối cảnh đó, tuyên bố trường hợp phù hợp lý tưởng với cả các truy vấn tĩnh, cũng như các truy vấn động, chẳng hạn như những câu hỏi mà bạn sẽ tìm thấy bên trong một quy trình được lưu trữ.it may be utilized to alter the data fetched by a query based on a condition. Within that context, the Case Statement is ideally suited to both static queries, as well as dynamic ones, such as those that you would find inside a stored procedure.