Mysql ASC对SQL的排序超过0,然后是0

Mysql ASC对SQL的排序超过0,然后是0,mysql,Mysql,我需要一个SQL查询,该查询的顺序为ASC>0,然后在查询结果的末尾为=0。 从表中选择*,其中排名>0,按排名ASC排序 然后,把排名为0的放在最后 名衔 马丁0 鲍勃2 马克8 马里奥0 索菲亚4 查询后: 名衔 鲍勃2 Marc 4 索菲亚8 马丁0 马里奥0 谢谢 试试下面的内容 SELECT *, IF(rank>0,1,0) as Ordering FROM TABLE ORDER BY Ordering DESC, rank ASC 然后,您可以使用ordering DE

我需要一个SQL查询,该查询的顺序为ASC>0,然后在查询结果的末尾为=0。 从表中选择*,其中排名>0,按排名ASC排序 然后,把排名为0的放在最后

名衔 马丁0 鲍勃2 马克8 马里奥0 索菲亚4

查询后: 名衔 鲍勃2 Marc 4 索菲亚8 马丁0 马里奥0

谢谢

试试下面的内容

SELECT *, IF(rank>0,1,0) as Ordering FROM TABLE ORDER BY Ordering DESC, rank ASC 
然后,您可以使用
ordering DESC
更改排序,以使结果集的开头或结尾具有零秩

只需执行以下操作:

ORDER BY rank=0 ASC, rank ASC
表达式
rank=0
作为布尔表达式计算,返回
0
表示FALSE,
1
表示TRUE,或
NULL

rank=0
的更符合ANSI标准的等效语法为:

CASE WHEN rank = 0 THEN 1 WHEN rank IS NULL THEN NULL ELSE 0 END

给定示例数据,这显示了按
rank=0
排序是如何实现结果的

  Name     Rank  rank=0
  -------  ----  ------
  Bob         2       0
  Sophia      4       0
  Marc        8       0
  Mario       0       1
  Martin      0       1

(注意:秩值相等的行的顺序是不确定的;
Mario
Martin
的顺序没有保证……任何一种方式都符合规范的顺序。)

难道
order BY rank=0 ASC,rank ASC
不会在结果集的开头带来零秩吗?它应该是rank=0 DESC?@GhazanfarMir:no。如果
rank=0
的计算结果为true,则为整数值1。如果
rank=0
为false,则为整数值0。因此,带有“false”的行将在带有“true”的行之前排序。这意味着rank值为0的行将在rank值为非零值的行之后排序。这很有趣。你介意提供更多关于这种现象解释的链接吗?@GhazanfarMir:Reference:。对于比较操作,MySQL返回整数值
1
表示TRUE,返回整数值
0
表示FALSE,或返回NULL。您可以向查询的选择列表添加一个进行比较的表达式(例如
rank=0
),并查看MySQL返回的内容。