在MySQL中,CASE
語句可以根據條件進行分支判斷,往往是配合其他函數一起使用的。其中,SUM
函數用于計算一列數值型數據的總和。
假設我們有如下數據表orders
:
CREATE TABLE orders (
id INT PRIMARY KEY,
customer_id INT,
amount INT,
status VARCHAR(10)
);
INSERT INTO orders VALUES
(1, 1, 100, 'shipped'),
(2, 1, 200, 'shipped'),
(3, 2, 150, 'cancelled'),
(4, 3, 50, 'shipped'),
(5, 3, 300, 'completed'),
(6, 4, 250, 'completed');
現在我們想要統計每個客戶不同訂單狀態下的總金額。我們可以使用以下語句:
SELECT customer_id,
SUM(CASE WHEN status = 'shipped' THEN amount ELSE 0 END) AS shipped_amount,
SUM(CASE WHEN status = 'cancelled' THEN amount ELSE 0 END) AS cancelled_amount,
SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END) AS completed_amount
FROM orders
GROUP BY customer_id;
以上語句使用了CASE
語句,當訂單狀態為不同的值時,條件成立,返回對應的訂單總金額;否則返回0。同時使用了SUM
函數,將每個客戶不同訂單狀態下的總金額相加,并按照客戶ID進行分組。
執行以上語句,得到以下結果:
+-------------+----------------+------------------+-------------------+
| customer_id | shipped_amount | cancelled_amount | completed_amount |
+-------------+----------------+------------------+-------------------+
| 1 | 300 | 0 | 0 |
| 2 | 0 | 150 | 0 |
| 3 | 50 | 0 | 300 |
| 4 | 0 | 0 | 250 |
+-------------+----------------+------------------+-------------------+
可以看到,以上語句成功統計了每個客戶不同訂單狀態下的總金額。