看到了 SQL 中 order by 3 desc,1 直接愣了一下。知道原因后,直接想骂人!

今天在看代码的时候,我发现了代码里面有一段骚操作 SQL,类似于下面这样的写法:

sql 复制代码
select id, name, age, sex 
from users 
order by 3 desc, 1;

当时我看到 order by 3 desc, 1 的时候,直接愣了一下,我还以为是一个什么新的语法,感觉是我的知识盲区了,于是我就赶紧去问了一下 AI。有没有同学和我一样懵逼的?

那么,这是一个什么语法呢?

"数字"排序是怎么回事?

其实,在 SQL 中 order by 后面不仅可以写字段名,还可以写 字段在 select 子句里的位置序号。

在上面的这个示例中,也就是:

  • 1 表示 select 列表里的第 1 个字段 → id
  • 2 表示第 2 个字段 → name
  • 3 表示第 3 个字段 → age
  • 4 表示第 4 个字段 → sex

所以这条 SQL 语句的含义是:

👉 先按 age 降序排序,如果年龄相同,再按 id 升序排序。

但是,在我看来,这完全就是一种骚操作了。我不建议这么干。

为什么不推荐用数字序号?

虽然 SQL 语法是支持的,但在实际项目里,这么干,估计谁看到了都想骂人。

1. 可读性差

当你写 order by 3 desc, 1 时,团队里其他人需要先数一数:3 到底是哪个字段?如果 select 子句很长,这就很容易出错。并且,你还不一定能够保证团队里面的其他人都知道有这种骚操作写法。

2. 容易引发 bug

如果有人后来在 select 子句里 调整了字段顺序 ,排序逻辑也会被悄悄改变。比如把 age 放到第二个位置,结果 order by 3 就不再是年龄,而直接就变成了别的字段。

3. 不利于维护

随着项目复杂度增加,SQL 会越来越长。用字段名排序才更直观,后期维护起来一眼就能看懂。


推荐的写法

更好的方式是 直接写字段名,这样既清晰又安全:

sql 复制代码
select id, name, age, sex 
from users 
order by age desc, id;

这样一来,即使后期有人调整了字段顺序,也不会影响排序逻辑。最主要的是,大部份人都能够一眼看明白。

总结

  • SQL 里 order by 可以用字段名,也可以用数字序号。
  • 用数字序号虽然简洁,但可读性和维护性差,容易出 bug。
  • 我的建议:在实际开发中,坚决用字段名排序。

写代码不仅仅能够让计算机可以跑起来,更重要的是要让人能够看懂。代码其实是写给人看的。

相关推荐
高频因子挖掘机1 小时前
实时行情为什么不应该逐只股票请求?批量查询与标的池管理实践
后端·github·api
程序猿DD6 小时前
OctaFuse Gateway 2.15.0:MCP 聚合、向量 Embeddings 与官方目录同步
后端·agent
余槐i9 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
需要8269 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
凤山老林10 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
伯恩bourne11 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
张彦峰ZYF11 小时前
停顿短不等于延迟低:G1、ZGC 与低延迟服务的目标分野、代价账本与选型标定
后端·回收暂停、应用停止总时长·到达安全点、分配停滞·屏障吃吞吐、并发线程吃核心·并发窗口吃堆余量·分区式靠挑回收集兑现目标·染色指针式不支持压缩引用
pride.li12 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
upala12 小时前
【仓颉语言入门 · 第二篇 第 6 课】
后端
罗丹丹Luna12 小时前
移动端显示“已提交”以后:SAP 与低代码集成该怎样暴露真实状态
后端·架构