【问题标题】:MYSQL order by - NULL values impacting my resultsMYSQL order by - NULL 值影响我的结果
【发布时间】: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,这将是处理此问题的适当方式。)

标签: mysql sql select null sql-order-by


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 2013-07-07
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多