按大于 0 的字段排序
Posted
技术标签:
【中文标题】按大于 0 的字段排序【英文标题】:order by field greater than 0 【发布时间】:2018-11-07 00:27:01 【问题描述】:假设我的数据库中有这些行:
1
0
5
2
0
3
3
5
0
5
我想对我的字段进行排序,我需要先返回值不为零的字段,当值为零时,排序后的行应该是这样的
1
5
2
3
3
5
5
0
0
0
我不想按数字排序,我想最后显示0个值,
我有这段代码,但它按数字排序:
ORDER BY cASE WHEN num_mojud = 0 THEN num_mojud END ASC,CASE WHEN num_mojud > 0 THEN num_mojud END ASC
or
ORDER BY IF (num_mojud = 0, 9999999, num_mojud )
我该怎么做?
【问题讨论】:
这种模式似乎是随机的,除了手动排序之外,我不确定它是否可能,但我可能是错的。 您需要一列来指定不包含零的行的顺序。 ORDER BY IF(num_mojud=0,1,0) 【参考方案1】:在 mysql 中,您可以使用两个键进行排序。请注意,SQL 表代表 无序 集。因此,天真地,您可以通过按值排序将零放在第一位(假设值是非负数):
order by num_mojud
这似乎不是你想要的。您可以通过以下方式将零放在第一位,其余的按任意顺序:
order by (num_mojud = 0) desc
MySQL 将布尔值视为数字,“1”表示真,“0”表示假。因此,desc
的顺序是按键。
您可以按照 随机 的顺序将零放在首位,方法是:
order by (num_mojud = 0) desc, rand()
如果您有一个具有您想要的顺序的列,您可以将零放在第一位并保留其余部分的顺序:
order by (num_mojud = 0) desc, id
【讨论】:
【参考方案2】:select num_mojud
from MyTable
order by case when num_mojud is 0 then 1 else 0 end, num_mojud
【讨论】:
注意使用“IS”对我不起作用,但使用“=”可以。order by case when num_mojud = 0 then 1 else 0 end, num_mojud
【参考方案3】:
您可以从自定义表格中选择num_mojud
。
第一个:SELECT num_mojud FROM tableName WHERE num_mojud > 0
获取所有大于 0 的数字
第二个:SELECT num_mojud FROM tableName WHERE num_mojud = 0
所有数字都等于0
SELECT num_mojud
FROM (
(SELECT num_mojud FROM tableName WHERE num_mojud > 0)
UNION
(SELECT num_mojud FROM tableName WHERE num_mojud = 0)
) as myCustomTable
【讨论】:
以上是关于按大于 0 的字段排序的主要内容,如果未能解决你的问题,请参考以下文章