mysql - 为什么 null 值在 mysql 中排名不同?

标签 mysql sql database null ranking

昨天我问了一个关于学生分数排名的问题。

[ 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;

这就是结果。

enter image description here

所以我想知道 NULL 值是否相同?这个查询不应该为我数据库中的每个用户提供排名 1 吗?为什么它会递增地对空值进行排名?

最佳答案

许多人认为 NULL 表示没有值不存在。连Wikipedia这样解释。

将其视为未知值,一切都会更有意义。

不能比较两个未知值,因为它们是未知的。它们不相等,但也不相同。它们都不比另一个大。

两个未知值的比较结果也是一个未知值(即NULL)。

关于mysql - 为什么 null 值在 mysql 中排名不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34654567/

相关文章:

mysql - 在此 bash 脚本中获取 LAST_INSERT_ID

mysql - 为结果集中的每个id获取 `n`行MYSQL

database - sybase系统程序-如何得到结果?

php - 如何显示连接表中的图像

sql - 如果 B 列为 Null,如何从 A 列插入数据;如果 A 列为 Null,如何从 B 列插入数据

php - 将动态创建的复选框值存储在 Laravel 的另一个表中

mysql - codeigniter db 函数 db->set() 不能与 select 一起使用?

mysql - SQL Select 包括数据类型和数据值

SQL Group LEFT JOIN 结果

sql - 如何存储从 2017-08-20 到 2017-08-24 发生的事件?什么数据类型?