order by高级用法:case when then

188 阅读1分钟

我在开发的时候碰到这样一个需求:

一个任务它有三种状态:等待,进行和完成,分别对应字符串"1"、"2"、"3"。

我希望将多个任务返回的时候,能够优先将状态为进行的任务返回在列表前面,其次是等待状态的任务,最后是完成状态的任务。

这个时候,我们就需要借助case when then来实现这种功能。

SQL语句如下:

select * from task
order by
	case status
    when status = "2" then 3
    when status = "1" then 2
    when status = "3" then 1
    else 0 end, status desc

参考文章

ORDER BY 高级用法之CASE WHEN