今天在看代码的时候,我发现了代码里面有一段骚操作 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。
- 我的建议:在实际开发中,坚决用字段名排序。
写代码不仅仅能够让计算机可以跑起来,更重要的是要让人能够看懂。代码其实是写给人看的。