获取和排序值大于零的行,然后是值为零的行

Erg*_*gec 8 mysql sql

我有一张这样的桌子

id    title    display_order
1     t1       3
2     t2       1
3     t3       5
4     t4       4
5     t5       2
6     t6       0
7     t7       7
8     t8       6
9     t9       0
10    t10      0
Run Code Online (Sandbox Code Playgroud)

我需要的是得到这样的结果

id    title    display_order
2     t2       1
5     t5       2
1     t1       3
4     t4       4
3     t3       5
8     t8       6
7     t7       7
...order of the rest is not important but should be in the result
6     t6       0
9     t9       0
10    t10      0
Run Code Online (Sandbox Code Playgroud)

我可以通过两个SQL查询获得此结果,然后将它们组合在一起.

有没有办法用一个SQL做到这一点?

谢谢

And*_*y M 18

SELECT *
FROM atable
ORDER BY
  display_order = 0,
  display_order
Run Code Online (Sandbox Code Playgroud)

display_order为0时,第一个排序项display_order = 0,计算结果True,否则计算结果为False.True排序后False- 所以,第一个排序标准确保display_order在列表末尾排序0的行.

第二个ORDER BY项,display_order另外指定具有非零订单值的行的顺序.

因此,这两个标准为您提供所需的排序顺序.