order by 子句在我的sql中的状态

JN_*_*bie 4 mysql sql

我正在对表进行排序,以显示状态为 3 的记录,然后状态为 4,然后是 1。

在当前表中,这是输出

id    status
 1     3
 2     4
 3     4
 4     3
 5     1
Run Code Online (Sandbox Code Playgroud)

现在当我应用查询时

select * from table order by model.status desc 
Run Code Online (Sandbox Code Playgroud)

输出是:

id    status
 2     4
 3     4
 1     3
 4     3
 5     1
Run Code Online (Sandbox Code Playgroud)

我想要的实际上是下面的输出。首先是状态 3,然后是状态 4,然后是状态 1。如何实现以下输出

id    status
 1     3
 4     3
 2     4
 3     4
 5     1
Run Code Online (Sandbox Code Playgroud)

Rap*_*aus 5

您可以使用 ~0,而不是神奇的 9999999 数字,它代表 big int 的最大可能值...应该足够了;)

order by (case when status = 1 then ~0 else status end) 
Run Code Online (Sandbox Code Playgroud)

其他解决方案,没有任何幻数

order by status = 1 , status
Run Code Online (Sandbox Code Playgroud)

首先按“布尔值”(数据库中的 0 或 1)排序,然后按状态排序