2

考虑以下示例:

+---------+------------+
| value   | name       |
+---------+------------+
|      42 | abresas    |
|       0 | dionyziz   |
|       6 | dionyziz2  |
|       0 | izual      |
|       8 | kokos      |
|      37 | kostis90gr |
|       0 | test       |
|      35 | usertest   |
+---------+------------+

我想按值的升序对其进行排序,但我希望所有值为 0 的名称都显示在底部。所以排序顺序应该是:6,8,35,37,42,0,0,0

知道这是否可以通过 sql 实现吗?

4

3 回答 3

7

当然。使用IF 函数

ORDER BY IF(value=0,1,0), value
于 2012-07-09T15:53:40.247 回答
4

是的,您只需要调整 order by 子句:

order by (case when value = 0 then 999999 else value end)

是一种方法,假设有一个最大值。另一种更通用的方法是:

order by (case when value = 0 then 1 else 0 end), value
于 2012-07-09T15:54:33.557 回答
-1

您可以使用 UNION 关键字来组合两个不同查询的结果,如下所示:

(select * from tableName where value>0 order by value) 
union 
(select * from tableName where value=0)
于 2012-07-09T16:00:16.967 回答