记录一次SQL语句ORDER BY 排序失效的问题

我在工作中用到了借助SQL实现ORDER BY的多字段排序,但由于对 SQL 的语法了解不够导致踩到一个坑,这里做一下记录.
我的SQL 类似于下面这样:

SELECT * FROM table1 ORDER BY create_time,id DESC

我对这条SQL的期望是首先按照 create_time 进行降序排序,如果 create_time 相同的话,则按照 id 进行降序排序.但是如上面所说的,我对应的该条SQL 并没有按照我的想法实现排序.
在这里插入图片描述
如上图所见,SQL的执行结果并没有按照我的预期所显示.经过一番思考,我明白了我的理解哪里出了问题.实际我所写的其实是一种排序的缩写即:

SELECT * FROM table1 ORDER BY create_time,id DESC;
-- 等价于
SELECT * FROM table1 ORDER BY create_time ASC,id DESC;

即我没有指定create_time字段的排序方式,在SQL 解析的过程中,并不是按照最后面指定的排序方式来为两个字段做排序的,因此这里我指定两个字段希望能够对这两个字段做降序排序,但是最终却是对第一个字段create_time做了升序排序,对第二个字段id做了降序排序,导致我的代码与预期结果不符.因此,正确的SQL应该是

SELECT * FROM table1 ORDER BY create_time DESC,id DESC;

这里总结一下,我之所以理解失误有可能是与 GROUP BY 对多字段分组处理方式,我以为ORDER BY 的实现逻辑相同.

参考资料

SQL语句order by多条件排序第一个条件

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值