如何在sql中使用CASE方法

我会在具体的栗子中给大家说明怎么使用,首先是查询

查询

  1、当你需要在一张表的某个字段中查询不同情况下的不同结果,并展示

    

    如上图,我们需要将0-16岁的人查出来标记为少年,17-28岁的人标记为青年,29-40岁的人标记为壮年,41-65岁的人标记为中年,66以及以上的标记为老年

    那么我们可以这样写,为了方便对比,我将结果放到了上面

    

  2、上面的情况还有一种写法,但是这种情况只适用于等于的情况,并不能判断区间,所以当你的状态条件比较少的时候是可以用这种方法的

    

  3、我们还可以把表变为横向

    

    

    通过上图sql就可以将数据变为横向的,而且我们可以在这个基础上进行进一步的判断,比如我们需要查出来个工作的人数

    a、

    b、

修改

  当我们希望将所有的建筑工都改成第六种工作消防员的时候就可以用这种方法来修改了

    

    

    可以看到建筑工已经没有了,两条数据已经修改成为消防员了,需要注意的是修改的时候必须在else中将原先的值重新赋予,否则会变为null

  

    

    

<think>好的,我现在需要帮助用户了解SQLCASE WHEN的用法,并提供示例教程。根据用户提供的引用资料,他们提到了CASE WHEN与SUM结合使用进行分段统计,以及使用CASE WHEN离散化时间段的例子。我需要确保覆盖这些内容,并且可能还需要补充其他常见用法。 首先,我应该先解释CASE WHEN的基本结构,让用户有一个整体的认识。然后分点说明不同的应用场景,比如简单条件判断、多条件分支、聚合统计、数据离散化和更新数据。每个部分都需要例子,这样用户更容易理解。 用户提供的引用[1]中,用SUM和CASE WHEN统计不同状态的数量,这可能涉及到条件聚合,这部分需要详细说明。引用[2]是关于将时间划分为不同时段,属于数据离散化的例子,这也是一个常见的用例,需要包含进去。 此外,可能需要提到在SELECT、WHERE、ORDER BY子句中使用CASE WHEN,但根据用户提供的引用,重点可能是在SELECT和聚合函数中使用,所以优先处理这些情况。同时,用户可能对更新数据时的应用感兴趣,这也是一个重要的点,应该包括进来。 需要注意示例的代码是否正确,比如在引用[2]中,原SQL的call_period比较可能使用了>和<,但如果是字符串类型,可能需要考虑是否应该用字符串比较,或者是否应该转换为数值。不过用户提供的例子中直接用了字符串比较,所以可以保留,但可能需要提醒用户注意数据类型。 另外,用户的问题是关于用法和示例教程,所以结构要清晰,分点列出,每个用法对应一个例子。可能还需要总结使用场景,帮助用户记忆。 最后,生成相关问题的时候,需要考虑用户可能的后续问题,比如性能优化、多条件处理、与其他函数的结合使用,以及常见错误。这些相关问题可以帮助用户深入学习和解决问题。</think>### SQL CASE WHEN 用法详解 CASE WHEN 是 SQL 中实现条件逻辑的核心语法,支持**条件判断、数据转换、分段统计**等功能。以下是 5 种典型用法及示例: --- #### 1. 简单条件判断 ```sql SELECT name, CASE WHEN score >= 90 THEN '优秀' WHEN score >= 60 THEN '及格' ELSE '不及格' END AS grade FROM students; ``` **效果**:将分数映射为等级标签,输出字段包含`name`和`grade` --- #### 2. 多条件分支(离散化处理) ```sql SELECT order_id, CASE WHEN amount > 1000 THEN '大额订单' WHEN amount BETWEEN 500 AND 1000 THEN '中额订单' ELSE '小额订单' END AS order_type FROM orders; ``` **应用场景**:电商订单金额分类统计[^2] --- #### 3. 聚合统计(条件计数) ```sql SELECT SUM(CASE WHEN status = 'completed' THEN 1 ELSE 0 END) AS completed_count, AVG(CASE WHEN department = 'IT' THEN salary END) AS it_avg_salary FROM employees; ``` **优势**:单次查询完成多维度统计,比多次子查询效率更高[^1] --- #### 4. 数据清洗(空值处理) ```sql SELECT CASE WHEN phone IS NULL THEN '未填写' ELSE phone END AS contact_info FROM users; ``` --- #### 5. UPDATE 语句动态赋值 ```sql UPDATE products SET price = CASE WHEN category = 'Electronics' THEN price * 1.1 WHEN category = 'Clothing' THEN price * 0.9 ELSE price END; ``` **功能**:按商品类别差异化调整价格 --- ### 进阶技巧 1. **嵌套使用**:可在 CASE WHEN 中嵌套其他函数 ```sql CASE WHEN LENGTH(TRIM(address)) > 0 THEN address END ``` 2. **类型一致性**:所有 THEN 子句返回值类型必须相同 3. **性能优化**:将高频触发的条件放在前面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值