表数据为
要求: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