SQL之case when then用法

简介

case函数

简单类型

case sex
  when '1' then '男'
  when '2' then '女’
  else '其他' end

搜索类型

SELECT  
    employee_id,  
    name,  
    salary,  
    CASE  
        WHEN salary <= 3000 THEN 'Entry Level'  
        WHEN salary BETWEEN 3001 AND 7000 THEN 'Mid Level'  
        WHEN salary > 7000 THEN 'Senior Level'  
        ELSE 'Not Specified'  
    END AS salary_level  
FROM  
    employees;
  • CASE 语句是顺序敏感的,即它会从上到下评估 WHEN 子句,一旦找到第一个为真的条件,就会返回相应的结果,并忽略后面的所有条件。
  • ELSE 子句是可选的。如果没有任何 WHEN 条件为真,并且没有提供 ELSE 子句,那么 CASE 表达式的结果将是 NULL。
  • CASE 语句也可以用在 ORDER BY 子句中,用于根据复杂的条件对结果进行排序。
  • 在某些数据库系统中(如 SQL Server),CASE 语句还可以用于 UPDATE 语句中,根据条件更新表中的值。
  • else是可以不写的,end是必须要写的
  • END 关键字在 CASE 语句中是必须有的。它标记着 CASE 表达式的结束。无论是否包含 ELSE 子句,END 都是必需的。
 <update id="bitchUpdateStatueById">
        UPDATE user_finetune_tasks
        SET status = CASE service_name
        <foreach collection="updates" item="update" separator=" ">
            WHEN #{update.serviceName} THEN #{update.status}
        </foreach>
        END,
        finished_time = CASE service_name
        <foreach collection="updates" item="update" separator=" ">
            WHEN #{update.serviceName} THEN #{update.endTime}
        </foreach>
        END
        WHERE service_name IN
        <foreach collection="updates" item="update" open="(" separator="," close=")">
            #{update.serviceName}
        </foreach>
    </update>

简单形式的应用场景

简单形式和搜索形式的CASE语句在SQL中的应用场景有所不同,主要体现在它们处理条件逻辑的复杂性和灵活性上。简单形式的CASE语句通常用于基于单个表达式(或输入值)进行多个可能的匹配,并返回基于这些匹配的不同结果。这种形式的CASE语句在处理已知值的比较时非常有用。以下是对两者应用场景的具体说明,并附上相应的例子:

例子:

假设我们有一个名为products的表,包含以下列:product_id, product_name, 和 category_id。我们希望根据category_id的值来返回产品的类别名称。

SELECT  
    product_id,  
    product_name,  
    CASE category_id  
        WHEN 1 THEN '电子产品'  
        WHEN 2 THEN '服装'  
        WHEN 3 THEN '家居用品'  
        ELSE '其他'  
    END AS category_name  
FROM  
    products;

在这个查询中,我们根据category_id的值来返回产品的类别名称。如果category_id为1,则返回’电子产品’;如果为2,则返回’服装’;如果为3,则返回’家居用品’;否则返回’其他’。

搜索形式的应用场景

搜索形式的CASE语句则更加灵活,它基于一系列布尔表达式(条件)进行评估,并返回基于这些条件的不同结果。这种形式的CASE语句在处理复杂的条件逻辑时非常有用。

例子:

假设我们有一个名为orders的表,包含以下列:order_id, customer_id, order_date, 和 order_amount。我们希望根据订单金额和订单日期来返回订单的优惠等级。

SELECT  
    order_id,  
    customer_id,  
    order_date,  
    order_amount,  
    CASE  
        WHEN order_amount > 1000 AND order_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) THEN '高级优惠'  
        WHEN order_amount > 500 AND order_date >= DATE_SUB(CURDATE(), INTERVAL 14 DAY) THEN '中级优惠'  
        WHEN order_amount > 200 THEN '低级优惠'  
        ELSE '无优惠'  
    END AS discount_level  
FROM  
    orders;

在这个查询中,我们根据订单金额和订单日期来返回订单的优惠等级。如果订单金额大于1000且订单日期在过去7天内,则返回’高级优惠’;如果订单金额大于500且订单日期在过去14天内,则返回’中级优惠’;如果订单金额大于200,则返回’低级优惠’;否则返回’无优惠’。

总结

简单形式的CASE语句适用于基于单个表达式进行多个可能的匹配,并返回基于这些匹配的不同结果。而搜索形式的CASE语句则更加灵活,适用于处理复杂的条件逻辑,并返回基于这些条件的不同结果。在实际应用中,可以根据具体需求选择适合的CASE语句形式来优化查询逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值