SQL 中 CASE WHEN 及 SELECT CASE WHEN 的用法详解
更新时间:2025年10月08日 13:16:54 作者:思静鱼
CASE WHEN是SQL中非常实用的条件表达式,它允许你在查询中实现条件逻辑,本文给大家介绍SQL中CASE WHEN及SELECT CASE WHEN的用法,感兴趣的朋友一起看看吧
SQL 中 CASE WHEN 及 SELECT CASE WHEN 的用法
CASE WHEN 是 SQL 中非常实用的条件表达式,它允许你在查询中实现条件逻辑。以下是详细的用法说明:
1. 基本语法结构
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END或者简单形式:
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE default_result
END2. 在 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_id
WHEN 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.1
WHEN order_amount > 500 THEN 0.05
ELSE 0
END;
4. 在 ORDER BY 中的用法
SELECT * FROM customers
ORDER BY
CASE
WHEN country = 'China' THEN 1
WHEN country = 'USA' THEN 2
ELSE 3
END;
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'
END
WHEN 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 中非常强大的条件表达式,掌握它可以让你写出更加灵活和强大的查询语句。
到此这篇关于SQL 中 CASE WHEN 及 SELECT CASE WHEN 的用法的文章就介绍到这了,更多相关sql case when和select case when用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SQL中的单条件判断函数IF和多条件判断CASE WHEN的用法
MySQL提供了IF、IFNULL、CASE等条件判断函数,本文就来介绍一下SQL中的单条件判断函数IF和多条件判断CASE WHEN的用法,感兴趣的可以了解一下2023-10-10
SQL Server 排序函数 ROW_NUMBER和RANK 用法总结
下面的例子和SQL语句均在SQL Server 2008环境下运行通过,使用SQL Server自带的AdventureWorks数据库。2009-07-07
SQLSERVER Pager store procedure分页存储过程
SQL SERVER(2005)以上版本可用,相对应的页面逻辑中写的对应调用该存储过程的方法2010-06-06
SQLServer中Partition By及row_number 函数使用详解
partition by关键字是分析性函数的一部分,partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,本文给大家介绍SQLServer中Partition By及row_number 函数使用详解,需要的朋友参考下2015-11-11


最新评论