mysql——case

  

查询在2025-10-15以后,同一个用户下单2个以及2个以上状态为购买成功的课程的订单id,是否拼团以及客户端名字信息,最后一列如果是非拼团订单,则显示对应客户端名字,如果是拼团订单,则显示NULL,并且按照order_info的id升序排序,以上例子查询结果如下:

 

 

select o.id,o.is_group_buy, client.name as client_name
from (
    select * from order_info 
    where date >'2025-10-15' and status='completed'
    and user_id in (
        select user_id from order_info 
        where date>'2025-10-15' and status='completed'
        group by user_id 
        having count(user_id)>1
    )
)o
left join client
on o.client_id = client.id
order by o.id
select o.id,o.is_group_buy,
case when o.is_group_buy = 'No' then c.name else NUll end 
from order_info o left join client c on o.client_id = c.id
where o.date > '2025-10-15'
and o.status = 'completed'
and user_id in(
    select user_id from order_info
    where date >'2025-10-15'
    and status = 'completed'
    group by user_id
    having count(user_id)>1
) order by o.id

### MySQL CASE WHEN 使用教程 #### 语法结构 在MySQL中,`CASE WHEN`语句有两种主要形式:简单CASE表达式和搜索CASE表达式。 ##### 简单CASE表达式 这种类型的表达式用于比较一个表达式的值与多个可能的结果。其基本语法如下: ```sql CASE column_name_or_expression WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE default_result END ``` 例如,在员工表中根据部门编号返回不同名称可以这样写[^1]: ```sql SELECT employee_id, last_name, CASE department_id WHEN 10 THEN 'Administration' WHEN 20 THEN 'Marketing' ELSE 'Other Department' END AS dept_name FROM employees; ``` ##### 搜索CASE表达式 此版本更灵活,允许指定任意数量的布尔条件来进行判断。其格式为: ```sql CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END ``` 比如计算订单金额折扣的例子可表示成[^2]: ```sql SELECT order_id, total_amount, CASE WHEN total_amount >= 500 THEN total_amount * 0.9 WHEN total_amount BETWEEN 300 AND 499 THEN total_amount * 0.95 ELSE total_amount END as discounted_price FROM orders; ``` #### 应用场景实例 除了上述例子外,还可以将在更新操作(`UPDATE`)或删除记录(`DELETE`)时加入复杂业务逻辑控制。对于数据修改类的操作而言,利用`CASE WHEN`可以使SQL更加简洁高效[^3]。 考虑这样一个需求——调整库存商品的价格基于当前价格区间: ```sql UPDATE products SET price = CASE WHEN price < 10 THEN price * 1.1 WHEN price >= 10 AND price <= 50 THEN price * 1.08 ELSE price * 1.05 END; ``` 以上展示了如何通过`CASE WHEN`来动态设置新值并应用于批量更新命令之中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值