看到了 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 小时前
Python调用电价API返回JSON示例:分时电价、现货电价和字段解析
后端
武子康1 小时前
Shippy:确定性工具、会话级 Sandbox 与 Live-Data Eval(4 类收敛 + 7 步实现方案 + 6 类评测指标)
前端·人工智能·后端
我叫黑大帅1 小时前
我为什么单一消费者的场景下,要用 Redis List 当消息队列?
redis·后端·面试
AskHarries2 小时前
文件上传系统
后端
止语Lab3 小时前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活3 小时前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
程序员天天困3 小时前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
Huiturn3 小时前
GPT 5.6 连续编码 10 小时,纯 Python 啃下 Word 二进制格式——doc2docx 实现拆解
后端
用户298698530143 小时前
Python 实现 Excel 与 Markdown 互转的实用指南
后端·python·excel
用户77283104908403 小时前
krono-job:零侵入、单二进制交付的分布式任务调度平台(开源)
后端