按大于0的字段排序

wvyml7n5  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(331)

假设我的数据库中有以下行:

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 )

我怎么能这么做?

qybjjes1

qybjjes11#

在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
dgjrabp2

dgjrabp22#

您可以选择 num_mojud 从自定义表。
第一个: SELECT num_mojud FROM tableName WHERE num_mojud > 0 获取大于0的所有数字秒1: 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
uwopmtnx

uwopmtnx3#

select num_mojud
from MyTable
order by case when num_mojud is 0 then 1 else 0 end, num_mojud

相关问题