MYSQL order by - NULL 值影响我的结果

Posted

技术标签:

【中文标题】MYSQL order by - NULL 值影响我的结果【英文标题】:MYSQL order by - NULL values impacting my results 【发布时间】:2021-09-14 11:50:16 【问题描述】:

大约 200 行的表,其中 15 行将具有数值 rankClass (1-15)。其余的将具有 NULL 值。

ORDER BY rankClass, nameLast

它首先发布具有 NULL 值的行,当我添加 DESC 时,它当然会首先列出它设置的行,但是 15-1。我希望它首先列出具有值的那些,1-15,然后是 nameLast 的其余部分。

我尝试过合并,但结果为 1,10,11,12,13,14,15,2,3,4,5,6,7,8,9。

如何获得我正在寻找的结果?

【问题讨论】:

我不明白,为什么你最终通过应用COALESCE 来进行字符串排序。我很确定,ORDER BY COALESCE(rankClass, 999) 之类的东西可以正常工作。我想你错误地使用了一个字符串,比如ORDER BY COALESCE(rankClass, '999')。 (顺便说一句,很遗憾,mysql 不支持标准 SQL 子句ORDER BY ... NULLS LAST,这将是处理此问题的适当方式。) 【参考方案1】:

您可以在rankClass 中显式检查nulls,并通过将它们移至末尾的表达式进行排序:

SELECT   *
FROM     mytable
ORDER BY rankClass IS NULL, -- false comes before true
         rankClass

【讨论】:

这非常有效。当我搜索时,我没有使用 IS NULL 的一个示例。谢谢。【参考方案2】:

如果您反转 rankclass 的符号,则可以降序排序,最后留下空值,例如

SELECT RankClass, NameLast
FROM T
ORDER BY -RankClass DESC, nameLast;

Example on db<>fiddle

【讨论】:

以上是关于MYSQL order by - NULL 值影响我的结果的主要内容,如果未能解决你的问题,请参考以下文章

MySQL进阶5--分组排序和分组查询 group by(having) /order by

mysql order by,先为null,后为DESC

Oracle order by 处理NULL值

MySQL中order by排序时,数据存在null咋办

Mysql5.7 order by 影响 产生 ICP

Mysql5.7 order by 影响 产生 ICP