首页 > 数据库 > mysql教程 > 如何限制 PostgreSQL 中每个组内的行数?

如何限制 PostgreSQL 中每个组内的行数?

DDD
发布: 2025-01-15 12:09:45
原创
583 人浏览过

How to Limit Rows Within Each Group in PostgreSQL?

PostgreSQL 分组限制:显示每个分组中的前 N 行

数据库中经常需要从特定分组中提取有限数量的行。在 PostgreSQL 中,可以使用 LIMIT 子句结合分组操作来满足此需求。

以下示例演示了需要在每个 section_id 分组中检索前两行(按 name 列排序)的需求。例如,从给定的表中:

<code> 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</code>
登录后复制

我们希望获得以下结果:

<code> id | section_id | name
----+------------+------
  1 |          1 | A
  2 |          1 | B
  5 |          2 | E
  6 |          2 | F
  7 |          3 | G</code>
登录后复制

在 8.4 之前的 PostgreSQL 版本中,缺乏内置函数来有效处理此类查询。然而,在 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>
登录后复制

此解决方案利用 ROW_NUMBER() 窗口函数为每个 section_id 分区内的每一行分配一个顺序号。ORDER BY 子句指定排序条件(在本例中为 name)。然后将 LIMIT 2 条件应用于子查询,将结果限制为每个分组的前两行(按 name 排序)。

以上是如何限制 PostgreSQL 中每个组内的行数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板