首页 >数据库 >mysql教程 >如何在 PostgreSQL 中高效地获取每个组中的前 N ​​行?

如何在 PostgreSQL 中高效地获取每个组中的前 N ​​行?

Barbara Streisand
Barbara Streisand原创
2025-01-15 11:05:45446浏览

How to Efficiently Fetch the First N Rows Within Each Group in PostgreSQL?

PostgreSQL:检索每组中的前 N ​​行

PostgreSQL 中的一项常见任务涉及从每个组中选择一定数量的行。这可以使用通常称为“分组限制”的技术有效地实现。 以下是如何使用窗口函数(在 PostgreSQL 8.4 及更高版本中提供)来实现此目的:

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

说明:

ROW_NUMBER() OVER (PARTITION BY section_id ORDER BY name) 窗口函数为每个 rn 组中的每一行分配一个唯一的排名 (section_id),按 name 列排序。 然后,外部查询过滤这些结果,仅保留排名 (rn) 小于或等于 N 的行(将 N 替换为您所需的每组行数)。 这有效地将结果限制为每个组的顶部 N 行。

以上是如何在 PostgreSQL 中高效地获取每个组中的前 N ​​行?的详细内容。更多信息请关注PHP中文网其他相关文章!

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