首页 >数据库 >mysql教程 >如何在 PostgreSQL 中选择按特定列排序的每组前 N 行?

如何在 PostgreSQL 中选择按特定列排序的每组前 N 行?

Susan Sarandon
Susan Sarandon原创
2025-01-15 11:19:45206浏览

How to Select the Top N Rows per Group Ordered by a Specific Column in PostgreSQL?

PostgreSQL中的分组限制:按自定义列排序选择每个组中的前N行

为了根据自定义列顺序检索每个组中的前N行,PostgreSQL为用户(特别是使用PostgreSQL 8.4及以上版本的用户)提供了一种解决方案。

考虑包含列'id'、'section_id'和'name'的示例表:

id section_id name
1 1 A
2 1 B
3 1 C
4 1 D
5 2 E
6 2 F
7 3 G
8 2 H

根据提供的数据,所需输出是为每个'section_id'选择前两行(按'name'排序)。

PostgreSQL 8.4及以上版本的解决方案

<code class="language-sql">SELECT
  *
FROM (
  SELECT
    ROW_NUMBER() OVER (PARTITION BY section_id ORDER BY name) AS r,
    t.*
  FROM
    xxx t
) x
WHERE
  x.r <= 2;</code>

这段高级解决方案利用带有'PARTITION BY'和'ORDER BY'子句的'ROW_NUMBER()'函数来实现所需的结果集。'xxx'表中的每一行都在其各自的'section_id'组内分配一个排名,行按'name'排序。通过基于条件'x.r <= 2'的后续选择,我们有效地限制了每个组中返回的行数。

以上是如何在 PostgreSQL 中选择按特定列排序的每组前 N 行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn