PostgreSQL 的 ORDER BY 多列排序

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

1. 排序语义

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

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

看结果:

name salary
Allen 15000
David 85000
James 10000
Kim 45000
Mark 65000
Paul 20000
Teddy 20000
  • 名字严格按字母升序: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, SALARY NAME 降序,SALARY 升序
ORDER BY NAME, SALARY DESC NAME 升序,SALARY 降序(注意 ASC/DESC 要逐列写

4. 验证建议

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

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

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

相关推荐
今天AI了吗1 小时前
DeepSeek Harness 深度解析:从评测架构到实战落地
java·网络·数据库·人工智能·架构·java-ee
数据库小学妹1 小时前
为什么MySQL索引用B+树?从存储底层讲透原理
数据库·mysql·b+树·索引优化·磁盘io·数据库原理
BestHeaker2 小时前
制造业 MES 开发入门:和互联网业务开发的 5 个本质差异(一)
数据库·经验分享·制造业·mes
自动化监测Learner3 小时前
Navicat Premium 17 中文版安装教程(2026最新版)
java·linux·数据库
张文是假的啊3 小时前
常用JPA注解解释
数据库
Allen_LVyingbo4 小时前
医疗AI基础2026-构建可靠智能体的编程路径(上)
大数据·数据库·人工智能·python·自动化
疯狂打码的少年4 小时前
【数据库技术】多值依赖与第四范式(4NF)
数据库·笔记·算法
微软技术分享5 小时前
Ubuntu 本地部署Ollama+OpenWebUI教程
数据库·ubuntu·postgresql