PostgreSQL ORDER BY 语句用法详解

在 PostgreSQL 里,ORDER BY 语句用于对查询结果进行排序,它能让查询结果按照指定列或表达式的顺序展示。下面从基本语法、排序规则、多列排序、结合聚合函数等方面详细介绍其用法。

1. 基本语法

ORDER BY 语句的基本语法如下:
 
SELECT column1, column2, ...
FROM table_name
[WHERE condition]
ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;
  • column1, column2, ...:指定要查询的列。
  • table_name:指定要查询的表。
  • WHERE condition:可选的筛选条件。
  • ORDER BY:用于指定排序的列。
  • ASC:表示升序排序,为默认值。
  • DESC:表示降序排序。

2. 升序和降序排序

升序排序

-- 创建示例表
CREATE TABLE employees (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    salary DECIMAL(10, 2)
);

-- 插入示例数据
INSERT INTO employees (name, salary)
VALUES
    ('Alice', 5000.00),
    ('Bob', 6000.00),
    ('Charlie', 4500.00);

-- 按工资升序排序
SELECT *
FROM employees
ORDER BY salary ASC;

在这个例子中,ORDER BY salary ASC 表示按照 salary 列进行升序排序,结果会按照工资从低到高排列。

降序排序

-- 按工资降序排序
SELECT *
FROM employees
ORDER BY salary DESC;

这里的 ORDER BY salary DESC 表示按照 salary 列进行降序排序,结果会按照工资从高到低排列。

3. 多列排序

可以使用 ORDER BY 对多列进行排序,先按照第一列排序,如果第一列的值相同,则按照第二列排序,以此类推。
-- 按部门和工资升序排序
SELECT *
FROM employees
ORDER BY department ASC, salary ASC;

在这个查询中,先按照 department 列进行升序排序,当 department 列的值相同时,再按照 salary 列进行升序排序。

4. 对表达式排序

除了对列进行排序,还可以对表达式进行排序。

-- 按工资的 10% 进行降序排序
SELECT name, salary, salary * 0.1 AS bonus
FROM employees
ORDER BY salary * 0.1 DESC;

这里的 ORDER BY salary * 0.1 DESC 表示按照 salary * 0.1 的结果进行降序排序。

5. 结合聚合函数排序

在使用聚合函数(如 SUMAVGCOUNT 等)的查询中,也可以使用 ORDER BY 对聚合结果进行排序。
 
-- 按部门分组,计算每个部门的平均工资,并按平均工资降序排序
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
ORDER BY avg_salary DESC;

在这个查询中,先按照 department 列进行分组,计算每个部门的平均工资,然后按照平均工资进行降序排序。

6. 对 NULL 值的排序

在 PostgreSQL 中,NULL 值在排序时有特定规则。默认情况下,升序排序时 NULL 值排在最前面,降序排序时 NULL 值排在最后面。可以使用 NULLS FIRST 或 NULLS LAST 来明确指定 NULL 值的排序位置。
 
-- 升序排序,NULL 值在最后面
SELECT *
FROM employees
ORDER BY salary ASC NULLS LAST;

-- 降序排序,NULL 值在最前面
SELECT *
FROM employees
ORDER BY salary DESC NULLS FIRST;

7. 使用列索引排序

可以使用列在 SELECT 列表中的索引位置来进行排序。索引从 1 开始。

-- 按第二列(name 列)升序排序
SELECT id, name, salary
FROM employees
ORDER BY 2 ASC;

通过灵活运用 ORDER BY 语句,可以让查询结果按照所需的顺序展示,方便数据的查看和分析。

posted on 2025-03-27 09:51  数据与人文  阅读(120)  评论(0)    收藏  举报