MySQL中order by排序时,数据存在null,排序在最前面
在MySQL中,当你使用ORDER BY
进行排序时,默认情况下NULL
值会被视为最大值,排在其他非NULL
值的后面。如果你想要改变这种默认行为,使得包含NULL
值的行在排序时出现在非NULL
值之前,你可以使用ORDER BY
子句中的IS NULL
或ISNOT NULL
条件以及CASE
语句。
下面是一个示例,假设我们有一个名为students
的表,其中包含名为name
和score
的列,我们想要按照score
进行排序,但是将NULL
的score
视为最小值,排在非NULL
分数的前面:
SELECT name, score
FROM students
ORDER BY
CASE
WHEN score IS NULL THEN 1
ELSE 0
END,
score;
在这个查询中,我们首先根据score
是否为NULL
使用CASE
语句来添加一个额外的排序条件。当score
为NULL
时,CASE
语句返回1,这将使得这些行在排序中排在最前面。然后,我们按照score
本身的值进行排序。由于CASE
语句在这里已经保证了所有NULL
值会被排序系统视为最小值,因此非NULL
值会按照它们实际的排序顺序排列。
评论已关闭