按特定值排序,然后在其余值中旋转



我有这个查询:

SELECT * FROM Users;

我回来的地方

 id    name  ...
 1     ...
 2     ...
 3     ...
 4     ...

现在,我想要的是根据 id 对我得到的结果进行排序,并基于此旋转顺序。例如,假设我想根据 ID=3 进行排序。我想要回来的是:

 id    name  ...
 3     ...
 4     ...
 1     ...
 2     ...

这是可以直接在MySQL中实现的,还是我必须这样做?

我认为很简单:

SELECT * FROM Users ORDER BY id<3,id

您可以对两列进行排序,第一列仅在id >= 3时填充:

order by
    case 
    when id >= 3 then -id
    end desc
,   id

第一列按-id排序,因此我们可以降序排序,其中null在末尾。

SQL Fiddle的现场示例。

您可以使用

ORDER BY CASE 
    WHEN id < 3 THEN id + (SELECT MAX(id) FROM users) 
    ELSE id 
END

但请注意,MySQL 将无法使用 Index 进行该排序。我认为在SQL服务器之外进行这种轮换是最务实的解决方案。

最新更新