Mysql ASC对SQL的排序超过0,然后是0
我需要一个SQL查询,该查询的顺序为ASC>0,然后在查询结果的末尾为=0。 从表中选择*,其中排名>0,按排名ASC排序 然后,把排名为0的放在最后 名衔 马丁0 鲍勃2 马克8 马里奥0 索菲亚4 查询后: 名衔 鲍勃2 Marc 4 索菲亚8 马丁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
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返回的内容。