PostgreSQL 的 ORDER BY 多列排序

PostgreSQL 的多列排序,核心要点如下:

1. 排序语义

SELECT * FROM COMPANY ORDER BY NAME, SALARY ASC;
  • ORDER BY从左到右依次排序:先按 NAME 排,遇到 NAME 相同时再按 SALARY 排。
  • 关键点:ASC 只修饰它紧跟的前一列 SALARY,而 NAME 没有显式指定,但 ASC(升序)本来就是默认值,所以两列实际都是升序。

2. 为什么结果看起来"只按姓名排"

看结果:

namesalary
Allen15000
David85000
James10000
Kim45000
Mark65000
Paul20000
Teddy20000
  • 名字严格按字母升序:Allen → David → James → Kim → Mark → Paul → Teddy。
  • 因为表中没有重名,第二关键字 SALARY 根本没有机会参与排序,所以 salary 看起来毫无规律(不是全局升序)——这是符合预期的,salary 只在名字相同时才起作用。

3. 常见易错点

写法效果
ORDER BY NAME, SALARY两列都升序(默认)
ORDER BY NAME, SALARY ASC同上一行,ASC 只作用于 SALARY
ORDER BY NAME DESC, SALARYNAME 降序,SALARY 升序
ORDER BY NAME, SALARY DESCNAME 升序,SALARY 降序(注意 ASC/DESC 要逐列写

4. 验证建议

想看第二关键字真正生效,可以给表里插入重名数据,例如:

INSERT INTO COMPANY (name, salary) VALUES ('Paul', 50000);
SELECT * FROM COMPANY ORDER BY NAME, SALARY;

此时两个 Paul 会按 salary 升序排列(20000 在前,50000 在后),就能直观看到 NAME 为主键、SALARY 为次键的排序效果。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草莓仙生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值