【mysql】case when 的用法

有如下几个场景:

1. user_score表,class表示班级名称,username表示学生名称,score表示成绩

idclassusernamescore
1Auser0189
2Auser0290
3Auser0391
4Buser0192
5Buser0293

需求:需要批量更新A班级内,user01、user02、user03的score值,使用一条sql语句,而不是3条sql

可以使用update 表名 set 字段名= case when ... then ... when ... then ... end 语句 

update user_score set score = case 
when username = 'user01' then 100 
when username = 'user02' then 99 
when username = 'user03' then 98 
end
where class = 'A'

2. task表,desc表示任务描述,principal表示任务负责人,creater表示创建人

iddescprincipalcreaterstatus
1任务1user01user03待处理
2任务2user02user01处理中
3任务3user01user01待处理
4任务4user02user01已处理
5任务5user01user04处理中
6任务6user02user03待处理

需求:查询任务排序规则为,任务负责人=user01在前排,创建人=user01在后排

可以使用order by CASE WHEN ... THEN ... else CASE WHEN ...  THEN ... else ... END end

select id,desc,principal,creater from task 
order by  CASE WHEN principal = 'user01' THEN 1 
else CASE WHEN creater = 'user01' THEN 2 
else 3 
END 
end

3. 查询任务排序规则为,按照状态位 待处理、处理中、已处理顺序正排

可以使用order by case 字段名 when ... then ... end asc

select id,desc,principal,creater from task 
order by case status 
when '待处理' then 1 
when '处理中' then 2 
when '已处理' then 3 
end 
asc

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值