SQL中CASE WHEN THEN的用法

温馨提示:本文最后更新于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的用法-十一张

高级用法

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中非常强大的工具,可以帮助我们处理复杂的数据逻辑。在使用时,应根据具体的业务需求和数据结构来灵活运用。

© 版权声明
THE END
如果觉得这篇文章对您有帮助,可以收藏本网址,方便下次访问!
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容