📚 目录

  1. 概述
  2. 基本语法
  3. 排序方向
  4. 按多个列排序
  5. 使用 ASCDESC
  6. 排序空值
  7. 使用 ORDER BYLIMIT 一起
  8. 参考资料

🛠️ 概述

ORDER BY 语句用于对查询结果进行排序。你可以根据一个或多个列对数据进行升序或降序排序。在 PostgreSQL 中,ORDER BY 是一种非常常用的查询功能,尤其是在处理需要特定排序顺序的数据时。


📝 基本语法

ORDER BY 子句的基本语法如下:

SELECT column1, column2, ...
FROM table_name
ORDER BY column_name [ASC | DESC];

  • column_name:用于排序的列名。
  • ASC:按升序排序(默认)。
  • DESC:按降序排序。

🔼 排序方向

ORDER BY 语句可以指定排序的方向:

  • 升序 (ASC):将数据按从小到大的顺序排序。
  • 降序 (DESC):将数据按从大到小的顺序排序。

默认情况下,ORDER BY 按升序排序。

示例(升序):

SELECT * FROM employees
ORDER BY salary;

该查询将返回 employees 表中按 salary 升序排列的所有员工记录。

示例(降序):

SELECT * FROM employees
ORDER BY salary DESC;

该查询将返回 employees 表中按 salary 降序排列的所有员工记录。


🔢 按多个列排序

你可以根据多个列对结果进行排序。当多个列被指定时,PostgreSQL 会首先按第一个列排序,如果第一个列中有重复值,则按第二个列排序,依此类推。

示例:

SELECT * FROM employees
ORDER BY department, salary DESC;

该查询将首先按 department 升序排序,如果 department 相同,则按 salary 降序排序。


🔽 使用 ASCDESC

ORDER BY 中,你可以指定每列的排序顺序,可以为每列使用 ASC(升序)或 DESC(降序)。

示例:

SELECT * FROM employees
ORDER BY department ASC, salary DESC;

此查询将首先按 department 升序排序,并在每个部门内按 salary 降序排序。


🚫 排序空值

在 PostgreSQL 中,NULL 值默认被认为是“无序的”,因此它们通常会排在升序排序的最后,降序排序的最前面。不过,你可以通过 NULLS FIRSTNULLS LAST 明确指定空值的位置。

示例(将空值排在最前):

SELECT * FROM employees
ORDER BY salary NULLS FIRST;

此查询将 salary 排序时将 NULL 值排在最前面。

示例(将空值排在最后):

SELECT * FROM employees
ORDER BY salary NULLS LAST;

此查询将 salary 排序时将 NULL 值排在最后面。


🔢 使用 ORDER BYLIMIT 一起

ORDER BY 经常与 LIMIT 一起使用,帮助你返回排序后的前 N 条记录。

示例:

SELECT * FROM employees
ORDER BY salary DESC
LIMIT 5;

该查询将返回薪水最高的前 5 名员工。


📘 参考资料