文章目錄
- 1. 數據轉換與映射
- 2. 動態條件篩選
- 3. 多條件分組統計
- 4. 數據排名與分級
- 5. 處理空值與默認值
- 6. 動態排序
CASE WHEN
語句在 SQL 中是一個非常強大且靈活的工具,除了常規的條件判斷外,還有很多巧妙的用法,以下為你詳細總結:
1. 數據轉換與映射
- 用途:將一列中的值根據特定規則映射為其他值,常用于數據清洗和標準化。
- 示例:假設有一個
products
表,其中category
列包含值'electronics'
、'clothing'
等,要將這些英文類別轉換為中文。
SELECT product_id,category,CASE categoryWHEN 'electronics' THEN '電子產品'WHEN 'clothing' THEN '服裝'ELSE '其他'END AS chinese_category
FROM products;
2. 動態條件篩選
- 用途:根據不同的條件動態篩選數據,實現類似參數化查詢的功能。
- 示例:假設有一個
orders
表,包含order_date
和amount
列,要根據不同的時間范圍篩選出不同金額的訂單。
SELECT order_id,order_date,amount
FROM orders
WHERE CASE WHEN MONTH(order_date) BETWEEN 1 AND 6 THEN amount > 100WHEN MONTH(order_date) BETWEEN 7 AND 12 THEN amount > 200ELSE 1 = 1 -- 不篩選END;
3. 多條件分組統計
- 用途:結合聚合函數,根據多個條件對數據進行分組統計。
- 示例:假設有一個
employees
表,包含department
和salary
列,要統計不同部門不同薪水范圍的員工數量。
SELECT department,SUM(CASE WHEN salary < 3000 THEN 1 ELSE 0 END) AS low_salary_count,SUM(CASE WHEN salary >= 3000 AND salary < 6000 THEN 1 ELSE 0 END) AS medium_salary_count,SUM(CASE WHEN salary >= 6000 THEN 1 ELSE 0 END) AS high_salary_count
FROM employees
GROUP BY department;
4. 數據排名與分級
- 用途:根據某列的值對數據進行排名或分級。
- 示例:假設有一個
students
表,包含student_id
和score
列,要根據成績對學生進行分級。
SELECT student_id,score,CASE WHEN score >= 90 THEN 'A'WHEN score >= 80 THEN 'B'WHEN score >= 70 THEN 'C'WHEN score >= 60 THEN 'D'ELSE 'F'END AS grade
FROM students;
5. 處理空值與默認值
- 用途:在查詢結果中對空值進行處理,為其設置默認值。
- 示例:假設有一個
customers
表,包含customer_name
和email
列,若email
為空,則顯示默認值'未提供郵箱'
。
SELECT customer_name,CASE WHEN email IS NULL THEN '未提供郵箱'ELSE emailEND AS email_info
FROM customers;
6. 動態排序
- 用途:根據不同的條件對查詢結果進行動態排序。
- 示例:假設有一個
products
表,包含product_name
、price
和sales_volume
列,要根據不同的條件對產品進行排序。
SELECT product_name,price,sales_volume
FROM products
ORDER BY CASE WHEN 'price' = 'price' THEN priceWHEN 'sales_volume' = 'sales_volume' THEN sales_volumeELSE product_nameEND;
這些巧妙用法可以讓你在處理復雜的 SQL 查詢時更加靈活和高效,根據具體的業務需求選擇合適的用法來實現所需的功能。