首页 > 解决方案 > 按大于 0 的字段排序

问题描述

假设我的数据库中有这些行:

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 )

我该怎么做?

标签: mysqlsqlsql-order-by

解决方案


在 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

推荐阅读