多个 ORDER BY

Posted

技术标签:

【中文标题】多个 ORDER BY【英文标题】:Multiple ORDER BY 【发布时间】:2020-04-30 08:34:25 【问题描述】:

我完全迷失在 OrderBy 子句中。

订购后我需要这个结果:ID: 8, 5, 2, 1, 4, 6, 7, 3

这些规则必须按此顺序应用:

top3 = 1 top2 = 1 top1 = 1 按 ASC 顺序,但顺序为“NULL”或 0 到行尾

有没有可能做这个排序?

谢谢大家!

【问题讨论】:

到目前为止您尝试过什么,请向我们展示查询。 【参考方案1】:

我会将您的要求翻译为:

order by
    top3 desc,
    top2 desc,
    top1 desc,
    nullif(`order`, 0) nulls last

最后一个标准通过升序 order 缩短,同时保持 nulls 和 0 值最后。

请注意,order 在所有 SQL 方言中都是保留字,因此不适合作为列名。

【讨论】:

【参考方案2】:

很遗憾,mysql 不支持NULLS LAST/NULLS FIRST。但是,它很容易被合并到查询中:

order by top1 desc, top2 desc, top3 desc,
         (ordercol is null or ordercol = 0) asc  -- put these values last

【讨论】:

以上是关于多个 ORDER BY的主要内容,如果未能解决你的问题,请参考以下文章

mysql order by多个字段

SQL ORDER 结果 BY 多个子句

如何在 Flask-SQLAlchemy 中执行多个“order_by”?

rank() over(partition by A order by B) MySQL里可以partition多个字段嘛

OVER ORDER BY 中的多个列

多个 ORDER BY