SQL 中 CASE WHEN 及 SELECT CASE WHEN 的用法
CASE WHEN
是 SQL 中非常實用的條件表達式,它允許你在查詢中實現條件邏輯。以下是詳細的用法說明:
1. 基本語法結構
CASE WHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE default_result
END
或者簡單形式:
CASE expression WHEN value1 THEN result1WHEN value2 THEN result2...ELSE default_result
END
2. 在 SELECT 語句中的用法
示例1:簡單條件判斷
SELECT employee_name,salary,CASE WHEN salary > 10000 THEN '高薪'WHEN salary > 5000 THEN '中等'ELSE '一般'END AS salary_level
FROM employees;
示例2:等值比較(簡單形式)
SELECT product_name,CASE category_idWHEN 1 THEN '電子產品'WHEN 2 THEN '服裝'WHEN 3 THEN '食品'ELSE '其他'END AS category_name
FROM products;
3. 在 UPDATE 語句中的用法
UPDATE orders
SET discount = CASE WHEN order_amount > 1000 THEN 0.1WHEN order_amount > 500 THEN 0.05ELSE 0END;
4. 在 ORDER BY 中的用法
SELECT * FROM customers
ORDER BY CASE WHEN country = 'China' THEN 1WHEN country = 'USA' THEN 2ELSE 3END;
5. 在 GROUP BY 中的用法
SELECT CASE WHEN age < 20 THEN '青少年'WHEN age BETWEEN 20 AND 30 THEN '青年'ELSE '成年'END AS age_group,COUNT(*) AS count
FROM users
GROUP BY age_group;
6. 嵌套 CASE WHEN 用法
SELECT student_name,score,CASE WHEN score >= 90 THEN 'A'WHEN score >= 80 THEN CASE WHEN attendance_rate > 0.9 THEN 'B+'ELSE 'B'ENDWHEN score >= 70 THEN 'C'ELSE 'D'END AS grade
FROM students;
7. 在聚合函數中使用
SELECT department_id,SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) AS male_count,SUM(CASE WHEN gender = 'F' THEN 1 ELSE 0 END) AS female_count
FROM employees
GROUP BY department_id;
注意事項
- CASE WHEN 會按順序判斷條件,第一個滿足的條件會被執行,后面的條件將被忽略
- 如果沒有條件滿足且沒有 ELSE 子句,結果將為 NULL
- 所有 THEN 子句返回的數據類型應該兼容
- 在復雜的 CASE 表達式中,適當使用括號可以提高可讀性
CASE WHEN 是 SQL 中非常強大的條件表達式,掌握它可以讓你寫出更加靈活和強大的查詢語句。