欢迎光临泰安市丧葬服务网
详情描述

SQL中的CASE表达式是一个强大的条件逻辑工具,可以用于SELECT、WHERE、ORDER BY、GROUP BY等子句中。以下是详细用法说明:

1. 基本语法结构

简单CASE表达式

CASE 列名或表达式
    WHEN 值1 THEN 结果1
    WHEN 值2 THEN 结果2
    ...
    ELSE 默认结果
END

搜索CASE表达式(更常用)

CASE
    WHEN 条件1 THEN 结果1
    WHEN 条件2 THEN 结果2
    ...
    ELSE 默认结果
END

2. 在SELECT中的基本用法

示例1:简单分类

SELECT 
    employee_name,
    salary,
    CASE
        WHEN salary > 10000 THEN '高薪'
        WHEN salary > 5000 THEN '中薪'
        ELSE '低薪'
    END AS salary_level
FROM employees;

示例2:数值转换

SELECT 
    product_name,
    CASE status
        WHEN 'A' THEN '激活'
        WHEN 'I' THEN '禁用'
        WHEN 'P' THEN '待审核'
        ELSE '未知'
    END AS status_desc
FROM products;

3. 高级用法

嵌套CASE

SELECT 
    student_name,
    score,
    CASE
        WHEN score >= 90 THEN 
            CASE 
                WHEN score = 100 THEN '完美'
                ELSE '优秀'
            END
        WHEN score >= 60 THEN '及格'
        ELSE '不及格'
    END AS grade
FROM students;

在聚合函数中使用

-- 统计不同等级人数
SELECT 
    COUNT(CASE WHEN score >= 90 THEN 1 END) AS excellent_count,
    COUNT(CASE WHEN score >= 60 AND score < 90 THEN 1 END) AS pass_count,
    COUNT(CASE WHEN score < 60 THEN 1 END) AS fail_count
FROM students;

4. 在WHERE子句中使用

-- 查找特定条件下的数据
SELECT *
FROM orders
WHERE 
    CASE 
        WHEN customer_type = 'VIP' THEN total_amount > 1000
        WHEN customer_type = 'NORMAL' THEN total_amount > 5000
        ELSE total_amount > 100
    END;

5. 在ORDER BY中使用

-- 自定义排序规则
SELECT 
    product_name,
    category,
    price
FROM products
ORDER BY 
    CASE category
        WHEN '电子' THEN 1
        WHEN '服装' THEN 2
        WHEN '食品' THEN 3
        ELSE 4
    END,
    price DESC;

6. 在UPDATE语句中使用

UPDATE employees
SET bonus = 
    CASE
        WHEN performance_rating = 'A' THEN salary * 0.2
        WHEN performance_rating = 'B' THEN salary * 0.1
        ELSE salary * 0.05
    END;

7. 在GROUP BY中使用

-- 按年龄段分组统计
SELECT 
    CASE
        WHEN age < 20 THEN '20岁以下'
        WHEN age < 30 THEN '20-29岁'
        WHEN age < 40 THEN '30-39岁'
        ELSE '40岁以上'
    END AS age_group,
    COUNT(*) AS user_count,
    AVG(income) AS avg_income
FROM users
GROUP BY 
    CASE
        WHEN age < 20 THEN '20岁以下'
        WHEN age < 30 THEN '20-29岁'
        WHEN age < 40 THEN '30-39岁'
        ELSE '40岁以上'
    END;

8. 多条件组合示例

-- 综合示例:客户分类
SELECT 
    customer_id,
    customer_name,
    total_purchases,
    last_purchase_date,
    CASE
        WHEN total_purchases > 100000 AND DATEDIFF(day, last_purchase_date, GETDATE()) < 30 
            THEN 'VIP活跃客户'
        WHEN total_purchases > 50000 AND DATEDIFF(month, last_purchase_date, GETDATE()) < 3 
            THEN '重要客户'
        WHEN total_purchases > 10000 AND DATEDIFF(month, last_purchase_date, GETDATE()) < 6 
            THEN '一般客户'
        WHEN DATEDIFF(year, last_purchase_date, GETDATE()) > 1 
            THEN '流失客户'
        ELSE '普通客户'
    END AS customer_category
FROM customers;

9. 性能优化建议

ELSE子句:总是包含ELSE子句,避免返回NULL 条件顺序:把最可能满足的条件放在前面 避免过度嵌套:嵌套层级不宜超过3层 考虑使用CTE:复杂逻辑可先使用CTE简化

10. 常见注意事项

  • END不能省略:每个CASE表达式必须以END结束
  • 数据类型一致:所有THEN返回的数据类型应该兼容
  • NULL处理:CASE中NULL需要用IS NULL判断
  • 性能影响:大量CASE可能影响查询性能

CASE表达式是SQL中非常实用的功能,掌握好它能让你的SQL查询更加灵活和强大。

相关帖子
泰安市一站式殡葬服务-正规白事服务公司,7×24小时全天
泰安市一站式殡葬服务-正规白事服务公司,7×24小时全天
法律对保障残疾孤老烈属的合法权益有哪些具体规定?
法律对保障残疾孤老烈属的合法权益有哪些具体规定?
泰安市商城网站开发建设%电商网站建设,专业团队
泰安市商城网站开发建设%电商网站建设,专业团队
2026年,企业如何合规申请并配合执行针对其产品的消费补贴政策?
2026年,企业如何合规申请并配合执行针对其产品的消费补贴政策?
泰安市殡葬服务|殡仪服务一条龙,丧礼吊唁
泰安市殡葬服务|殡仪服务一条龙,丧礼吊唁
泰安市殡仪服务公司-丧事一站式服务,快速上门
泰安市殡仪服务公司-丧事一站式服务,快速上门
南宁市一站式殡葬服务办理|白事一条龙办理,丧事追悼会服务
南宁市一站式殡葬服务办理|白事一条龙办理,丧事追悼会服务
扬州市丧葬一条龙价格-白事一站式服务,个性化服务
扬州市丧葬一条龙价格-白事一站式服务,个性化服务
宜都市专业网站建设公司%精准获客助手,企业解决方案
宜都市专业网站建设公司%精准获客助手,企业解决方案
公积金贷款还款账户费用,银行卡开卡管理费说明
公积金贷款还款账户费用,银行卡开卡管理费说明
智驾强制国标对最小风险策略的触发和执行作出了哪些规定呢?
智驾强制国标对最小风险策略的触发和执行作出了哪些规定呢?
揭阳市殡葬服务|殡仪服务流程,灵堂超度
揭阳市殡葬服务|殡仪服务流程,灵堂超度
南通市殡仪服务电话-丧事服务,24小时服务热线
南通市殡仪服务电话-丧事服务,24小时服务热线
张家口市网站设计%短视频运营推广,专业设计团队
张家口市网站设计%短视频运营推广,专业设计团队
平安银行公司经营贷款利率,新一贷与抵押贷利率表
平安银行公司经营贷款利率,新一贷与抵押贷利率表
成功通过租房落户后,个人的社会保险缴纳会因此发生改变吗?
成功通过租房落户后,个人的社会保险缴纳会因此发生改变吗?
接种疫苗后,我们的免疫系统内部会发生怎样一系列的反应?
接种疫苗后,我们的免疫系统内部会发生怎样一系列的反应?
新入职员工,当年度带薪年休假天数应该如何计算才合法合规?
新入职员工,当年度带薪年休假天数应该如何计算才合法合规?
阳泉市企业网站建设开发%精准获客助手,专业开发团队
阳泉市企业网站建设开发%精准获客助手,专业开发团队
徐州市殡仪服务-租冰棺,专业团队
徐州市殡仪服务-租冰棺,专业团队
来宾市商城网站制作设计%安卓系统app开发,高端网站开发设计
来宾市商城网站制作设计%安卓系统app开发,高端网站开发设计