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
中显式检查null
s,并通过将它们移至末尾的表达式进行排序:
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 值影响我的结果的主要内容,如果未能解决你的问题,请参考以下文章