sql语句order by优先级分等级多次排序、sql语句多字段分优先级排序

表数据为

 要求:plan_failed_reason字段不为空的在最上面;然后是plan_result字段根据/拆分,后面数字比前面大的;最后是其他的数据。

sql语句为:

SELECT
	id,
	plan_result,
	plan_failed_reason 
FROM
	mas_opt_scheme_req 
ORDER BY
CASE
	WHEN plan_failed_reason != '' THEN
	1 ELSE 10 
	END,
CASE
	WHEN SUBSTRING_INDEX( plan_result, '/', 1 ) < SUBSTRING_INDEX( plan_result, '/',- 1 ) THEN
	2 ELSE 10 
	END;

查出来的结果:

排序那的:CASE WHEN plan_failed_reason != '' THEN 1 ELSE 10 END就相当于if判断

大概意思为:将 plan_failed_reason 不为空的看成一个整体为1,其他数据为10,就是后面的那个THEN 1 ELSE 10;

第二句的意思为:将plan_result字段拆分后,后面那个数比前面大的看成2,其他数据为10;

排序那是升序所以结果就是:1-2-10

将数据改大点且将5/2那条数据的plan_result字段附上值在查询下

 

如果想要plan_failed_reason有值的放最后那将CASE WHEN plan_failed_reason != '' THEN 1 ELSE 10 END中的1改成大于10的就行

排的顺序为 2-10-11

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值