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

时间:2011-10-03 07:09:42

标签: 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

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

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

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

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

由于

3 个答案:

答案 0 :(得分:16)

SELECT *
FROM atable
ORDER BY
  display_order = 0,
  display_order

display_order为0时,第一个排序字词display_order = 0的计算结果为True,否则评估结果为FalseTrue之后False排序 - 因此,第一个排序标准会确保display_order为0的行在列表末尾排序。

第二个ORDER BY术语display_order另外指定具有非零订单值的行的顺序。

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

答案 1 :(得分:3)

尝试下面的一个 -

SELECT * FROM table_name 
ORDER BY IF (display_order = 0, 9999999, display_order)

答案 2 :(得分:1)

如果有人需要,这是T-SQL中的解决方案

SELECT * FROM Table ORDER BY CASE WHEN display_order = 0 THEN display_order END ASC,CASE WHEN display_order > 0 THEN display_order  END ASC