按大于 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 的字段排序的主要内容,如果未能解决你的问题,请参考以下文章

集合List根据多个字段进行排序

mysql 按表达式或函数分组多个字段分组排序

SQL 排序

django排序怎么将字符型字段按整型排序

在 Django 2.0 中按字段值排序

使用lambda表达式按字段排序