2025-07-18 09:16:08
,某些文章具有时效性,若有错误或下载地址失效,请在文末评论区留言在SQL中,CASE WHEN THEN语句是一种条件表达式,它允许在查询中根据一系列条件执行不同的逻辑。这种语句类似于编程中的if-else结构,可以在SELECT、UPDATE、INSERT和DELETE语句中使用。
示例代码
一个基本的CASE WHEN THEN语句的结构如下所示:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
这里,condition1、condition2等是评估为布尔值的表达式,result1、result2等是当相应条件为真时返回的值,default_result是当没有任何条件为真时返回的默认值。
例如,假设我们有一个员工表,我们想根据员工的工资等级来分类他们的工资:
SELECT
employee_id,
CASE
WHEN salary < 3000 THEN '低级'
WHEN salary BETWEEN 3000 AND 7000 THEN '中级'
WHEN salary > 7000 THEN '高级'
ELSE '未知'
END AS salary_level
FROM employees;
在这个例子中,每个员工会根据他们的工资被分配到不同的工资等级。
假设我们有一个包含学生成绩的表 students_scores,我们想要根据分数段给学生评级:
SELECT
student_name,
score,
CASE
WHEN score >= 90 THEN '优秀'
WHEN score >= 75 THEN '良好'
WHEN score >= 60 THEN '及格'
ELSE '不及格'
END AS grade
FROM students_scores;
这段代码根据每个学生的分数返回不同的评级。
例如,我想根据不同减排量的分布统计用户数量及合计:
select
case when amt = 0 then '等于0'
when amt > 0 and amt <= 2000 then '0-2000'
when amt > 2000 and amt <= 4000 then '2000-4000'
when amt > 4000 and amt <= 6000 then '4000-6000'
when amt > 6000 and amt <= 8000 then '6000-8000'
when amt > 8000 and amt <= 10000 then '8000-10000'
when amt > 10000 and amt <= 12000 then '10000-12000'
when amt > 12000 and amt <= 14000 then '12000-14000'
when amt > 14000 and amt <= 16000 then '14000-16000'
when amt > 16000 and amt <= 18000 then '16000-18000'
when amt > 18000 and amt <= 20000 then '18000-20000'
when amt > 20000 and amt <= 22000 then '20000-22000'
else '大于22000' end "分布",
count (usr_no) "用户数",
sum (amt) "总减排量(千克)"
from TEST_TABLE
group by
case when amt = 0 then '等于0'
when amt > 0 and amt <= 2000 then '0-2000'
when amt > 2000 and amt <= 4000 then '2000-4000'
when amt > 4000 and amt <= 6000 then '4000-6000'
when amt > 6000 and amt <= 8000 then '6000-8000'
when amt > 8000 and amt <= 10000 then '8000-10000'
when amt > 10000 and amt <= 12000 then '10000-12000'
when amt > 12000 and amt <= 14000 then '12000-14000'
when amt > 14000 and amt <= 16000 then '14000-16000'
when amt > 16000 and amt <= 18000 then '16000-18000'
when amt > 18000 and amt <= 20000 then '18000-20000'
when amt > 20000 and amt <= 22000 then '20000-22000'
else '大于22000' end
![图片[1]-SQL中CASE WHEN THEN的用法-十一张](https://www.11zhang.com/wp-content/uploads/2025/07/663ccbb89a20250718090347.png)
高级用法
CASE WHEN THEN语句也可以与聚合函数结合使用,以便在分组统计中应用条件逻辑。例如,如果我们想统计一个销售数据表中,每个产品类别的销售额和利润:
SELECT
product_type,
SUM(sales_amount) AS total_sales,
SUM(
CASE
WHEN product_type = '电子产品' THEN profit * 0.9
WHEN product_type = '家具' THEN profit * 0.8
ELSE profit
END
) AS adjusted_profit
FROM sales_data
GROUP BY product_type;
在这个例子中,我们根据产品类型调整利润计算,电子产品的利润乘以0.9,家具的利润乘以0.8,其他产品类型则不做调整。
注意事项
使用CASE WHEN THEN语句时,需要注意以下几点:
1、THEN后面的值和ELSE后面的值类型应该一致,否则可能会导致错误。
2、CASE表达式只会返回第一个符合条件的结果,后续的条件即使为真也会被忽略。
3、在使用CASE WHEN THEN语句时,可以选择使用简单的CASE函数或者更灵活的CASE WHEN条件表达式函数。
实际应用
在实际的数据库操作中,CASE WHEN THEN语句可以应用于多种场景,例如数据分类、行转列、条件更新等。它是SQL中非常强大的工具,可以帮助我们处理复杂的数据逻辑。在使用时,应根据具体的业务需求和数据结构来灵活运用。
暂无评论内容