SQL 中 CASE WHEN 及 SELECT CASE WHEN 的用法

SQL 中 CASE WHEN 及 SELECT CASE WHEN 的用法

CASE WHEN 是 SQL 中非常实用的条件表达式,它允许你在查询中实现条件逻辑。以下是详细的用法说明:

1. 基本语法结构

sql 复制代码
CASE 
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE default_result
END

或者简单形式:

sql 复制代码
CASE expression 
    WHEN value1 THEN result1
    WHEN value2 THEN result2
    ...
    ELSE default_result
END

2. 在 SELECT 语句中的用法

示例1:简单条件判断

sql 复制代码
SELECT 
    employee_name,
    salary,
    CASE 
        WHEN salary > 10000 THEN '高薪'
        WHEN salary > 5000 THEN '中等'
        ELSE '一般'
    END AS salary_level
FROM employees;

示例2:等值比较(简单形式)

sql 复制代码
SELECT 
    product_name,
    CASE category_id
        WHEN 1 THEN '电子产品'
        WHEN 2 THEN '服装'
        WHEN 3 THEN '食品'
        ELSE '其他'
    END AS category_name
FROM products;

3. 在 UPDATE 语句中的用法

sql 复制代码
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 中的用法

sql 复制代码
SELECT * FROM customers
ORDER BY 
    CASE 
        WHEN country = 'China' THEN 1
        WHEN country = 'USA' THEN 2
        ELSE 3
    END;

5. 在 GROUP BY 中的用法

sql 复制代码
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 用法

sql 复制代码
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. 在聚合函数中使用

sql 复制代码
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;

注意事项

  1. CASE WHEN 会按顺序判断条件,第一个满足的条件会被执行,后面的条件将被忽略
  2. 如果没有条件满足且没有 ELSE 子句,结果将为 NULL
  3. 所有 THEN 子句返回的数据类型应该兼容
  4. 在复杂的 CASE 表达式中,适当使用括号可以提高可读性

CASE WHEN 是 SQL 中非常强大的条件表达式,掌握它可以让你写出更加灵活和强大的查询语句。

相关推荐
阳光九叶草LXGZXJ3 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
字节渡客4 小时前
Redis键明明过期了,业务还在读到旧数据
数据库·redis·spring
OnlineProxy6 小时前
亚马逊多账号运营:如何在规避“关联封号”风险的同时实现电商规模化扩张
服务器·数据库·redis
辻弋2017 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
可乐鸡翅yeah_8 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
石头麻辣鱼9 小时前
Bamboo 调度系统 OceanBase 适配实战:存储过程迁移踩过的三个大坑
数据库
龙亘川9 小时前
数智驱动民政升级 精准守护民生保障
大数据·数据库·人工智能
念何架构之路9 小时前
zap扩展生态与总结
java·前端·数据库
晚安日记wanna10 小时前
MySQL 回表为什么这么慢?5 种优化手段逐个拆解
数据库·mysql·性能优化
第七页独白10 小时前
汽车零件厂如何通过 QMS 真正落地 IATF 16949——QMS软件系统:品质检验-内审稽核-8d客诉管理:全星质量管理软件系统
java·前端·数据库