mysql order by,先为null,后为DESC

Posted

技术标签:

【中文标题】mysql order by,先为null,后为DESC【英文标题】:mysql order by, null first, and DESC after 【发布时间】:2012-03-07 15:13:54 【问题描述】:

如何按字段排序 DESC,但先列出 NULL 值?

所以我有一张桌子:

reuestId | offerId | offerTitle
1        | 1       | Alfa
NULL     | 2       | Beta
2        | 3       | Gamma

我想选择它们,结果是:

NULL | 2 | Beta
2    | 3 | Gamma
1    | 1 | Alfa

【问题讨论】:

【参考方案1】:

试试这个:

ORDER BY [reuestId] IS NULL DESC, [reuestId] DESC

应该可以工作(对于 mysql

【讨论】:

或子查询到类别【参考方案2】:
SELECT *
FROM TableX
ORDER BY (requestId IS NOT NULL)
       , requestId DESC

【讨论】:

我认为这个答案与第一个相反? @xi.lin: 不,第一个把IS NULL (本质上是一个返回1或0的函数)按DESC顺序,这个把IS NOT NULL 按升序排列。它们是等价的。 @BlueRaja-DannyPflughoeft 感谢您的解释!我只是错误地认为 IS NULL 是一个过滤器而不是一个函数。

以上是关于mysql order by,先为null,后为DESC的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

MySQL - IN() 中的 ORDER BY 值

mysql order by limit 使用注意事项

使用Order By NULL 解决 group by后自动排序,优化Sql性能