📅  最后修改于: 2023-12-03 15:03:49.432000             🧑  作者: Mango
在 PostgreSQL 中,ROW_NUMBER() 函数可以被用于给查询结果集中的每一行赋一个唯一的数字序号。这个序号是动态生成的,每次查询都会重新生成。ROW_NUMBER() 函数对于编写分页查询,以及需要给结果集进行重新排序的场景非常有用。
ROW_NUMBER() 函数的基本语法如下:
ROW_NUMBER() OVER (
[PARTITION BY expression1, expression2,...expression_n ]
ORDER BY expression1 [ASC | DESC], expression2 [ASC | DESC], ... expression_n [ASC | DESC]
)
PARTITION BY
:它可选,用于将查询结果集分成一些组。每个组都有一个唯一的数字序号。如果忽略了PARTITION BY
,那么它将为查询结果集中的每一行生成一个唯一的数字序号。
ORDER BY
:它也可选,用于对结果集进行排序。排序的方式可以是ASC 或 DESC,您可以指定多个排序条件,例如: ORDER BY expression1 DESC, expression2 ASC。
以下是一个示例,展示了如何使用 ROW_NUMBER() 函数为每个部门统计其员工总数,并根据员工总数进行排序:
SELECT deptno, COUNT(*) AS employees, ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC)
FROM emp
GROUP BY deptno
ORDER BY employees DESC;
以上查询将生成下面的结果:
deptno | employees | row_number
---------+-----------+-----------
20 | 5 | 1
30 | 5 | 1
10 | 3 | 3
ROW_NUMBER() 函数是 PostgreSQL 中非常实用的一种函数,通过生成唯一的数字序号,可以达到简单分页、重新排序等操作,可以帮助编写各种不同场景下的查询。