昨天我问了一个关于学生分数排名的问题。
[ Rank users in mysql by their points ]
我实际上是在其他问题的帮助下解决了我的问题(感谢所有帮助过我的人)。
与此同时,我无意中想通了一些事情。如果我尝试按学生的分数对我的学生进行排名,并且如果分数列为空(NULL),我的查询也没有给出错误,它也将排名排序为 1-2-3-4,但所有值都是 NULL
这是我试过的查询
select er.*,
(@rank := if(@points = points,
@rank,
if(@points := points,
@rank + 1,
@rank + 1
)
)
) as ranking
from examresults er cross join
(select @rank := 0, @points := -1) params
order by points desc;
这就是结果。
所以我想知道 NULL 值是否相同?这个查询不应该为我数据库中的每个用户提供排名 1 吗?为什么它会递增地对空值进行排名?
最佳答案
许多人认为 NULL
表示没有值
或不存在
。连Wikipedia这样解释。
将其视为未知值
,一切都会更有意义。
不能比较两个未知值
,因为它们是未知的。它们不相等,但也不相同。它们都不比另一个大。
两个未知值
的比较结果也是一个未知值
(即NULL
)。
关于mysql - 为什么 null 值在 mysql 中排名不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34654567/