📜  PostgreSQL – ROW_NUMBER函数(1)

📅  最后修改于: 2023-12-03 15:03:49.432000             🧑  作者: Mango

PostgreSQL – ROW_NUMBER函数

在 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 中非常实用的一种函数,通过生成唯一的数字序号,可以达到简单分页、重新排序等操作,可以帮助编写各种不同场景下的查询。