Case When 的用法

本文介绍了 SQL 中 CASE WHEN 语句的基本用法及其应用场景。通过一个简单的成绩判断示例,展示了如何使用 CASE WHEN 来根据不同的条件返回不同的结果。

格式:
case
  when 条件  then
     内容
  when 条件  then
     内容
  else
      内容
  end


如:
 select t.name,
       case
         when t.fengshu >= 80 then
          'pass'
         else
          'file'
       end
       ,t.fengshu
 from t_table_chengji t;

### SQL CASE WHEN 语句的用法 #### 基本概念 `CASE WHEN` 是 SQL 中用于条件判断的强大工具,能够根据不同的条件返回相应的值。它可以分为两种形式:简单 `CASE` 表达式和搜索 `CASE` 表达式。 --- #### 简单 Case 表达式 简单 `CASE` 表达式的结构如下: ```sql SELECT column_name, CASE input_column WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE default_result END AS alias_name FROM table_name; ``` 这种形式适用于当输入列与特定值匹配时返回相应结果的情况。例如,假设有一个表 `students`,其中有一列 `grade` 表示学生的成绩等级,我们可以将其映射到具体的分数范围[^2]: ```sql SELECT name, grade, CASE grade WHEN 'A' THEN '90-100' WHEN 'B' THEN '80-89' WHEN 'C' THEN '70-79' ELSE 'Below 70' END AS score_range FROM students; ``` 此查询会将每名学生的成绩等级转换为其对应的分数范围。 --- #### 搜索 Case 表达式 搜索 `CASE` 表达式的灵活性更高,支持复杂的布尔条件表达式。其结构如下: ```sql SELECT column_name, CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END AS alias_name FROM table_name; ``` 例如,在一个销售数据表 `sales` 中,可以根据销售额计算奖励金额[^3]: ```sql SELECT salesperson, amount, CASE WHEN amount >= 5000 THEN amount * 0.1 WHEN amount >= 3000 AND amount < 5000 THEN amount * 0.08 WHEN amount >= 1000 AND amount < 3000 THEN amount * 0.05 ELSE 0 END AS bonus FROM sales; ``` 这段代码根据不同销售额区间分配不同比例的奖金。 --- #### 结合 WHERE 子句使用 除了在 `SELECT` 语句中生成新列外,还可以通过嵌套 `CASE` 来构建动态过滤条件。例如,筛选出符合条件的记录[^3]: ```sql SELECT * FROM products WHERE (CASE WHEN price > 100 THEN CASE WHEN stock > 50 THEN 'High Stock High Price' ELSE 'Low Stock High Price' END ELSE CASE WHEN stock > 50 THEN 'High Stock Low Price' ELSE 'Low Stock Low Price' END END) = 'High Stock High Price'; ``` 该查询先定义了一种分类逻辑,再基于分类结果进行进一步筛选。 --- #### 实际应用中的注意事项 1. **性能优化**:虽然 `CASE` 提供了极大的灵活性,但在大规模数据集上的频繁调用可能会影响性能。应尽量减少不必要的复杂度。 2. **可读性维护**:对于多层嵌套或多个分支情况下的 `CASE` 使用场景,建议保持清晰简洁的设计风格以便后续维护人员理解业务逻辑[^1]。 --- ### 示例总结 以下是综合以上知识点的一个完整案例演示如何利用 `CASE WHEN` 进行数据分析并完成最终目标设定: 假设有张员工考勤记录表 `attendance` 需要统计每位员工迟到次数及状态标记(早退/正常下班),可以编写如下脚本来达成目的: ```sql SELECT employee_id, COUNT(*) AS total_days, SUM(CASE WHEN check_in_time > '09:00:00' THEN 1 ELSE 0 END) AS late_count, MAX(CASE WHEN leave_early_flag = 1 THEN 'Early Leave' ELSE 'Normal Departure' END) OVER(PARTITION BY employee_id ORDER BY date DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS latest_status FROM attendance GROUP BY employee_id; ``` 这里不仅实现了基础计数功能还加入了窗口函数来获取最近一次的状态更新信息作为补充维度展示给管理层参考决策依据. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值