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中文网其他相关文章!