网站开发必备人员/直播营销
文章目录
- 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 查询时更加灵活和高效,根据具体的业务需求选择合适的用法来实现所需的功能。