首页 > 数据库 > mysql教程 > 如何在 PostgreSQL 中检索每组的前 N ​​行?

如何在 PostgreSQL 中检索每组的前 N ​​行?

Barbara Streisand
发布: 2025-01-15 10:23:46
原创
218 人浏览过

How to Retrieve the Top N Rows per Group in PostgreSQL?

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

PostgreSQL 通常需要从数据集中的每个组中检索特定数量的行。当处理排名数据或需要限制每个类别的结果时,这特别有用。 例如,您可能想要每个部门的前 3 个产品,按销售额排序。

示例:

考虑一个名为 products 的表,其结构和示例数据如下:

product_id department_id product_name sales
1 1 Product A 100
2 1 Product B 150
3 1 Product C 200
4 1 Product D 250
5 2 Product E 50
6 2 Product F 100
7 3 Product G 120
8 2 Product H 180

目标是从每个 department_id 中检索排名前 2 的产品(基于销售额)。 预期结果将是:

product_id department_id product_name sales
4 1 Product D 250
3 1 Product C 200
8 2 Product H 180
6 2 Product F 100
7 3 Product G 120

使用 ROW_NUMBER() 的解决方案(PostgreSQL 8.4 及更高版本):

PostgreSQL 8.4及以上版本提供了ROW_NUMBER()窗口函数,提供了高效的解决方案。 以下查询完成任务:

<code class="language-sql">SELECT product_id, department_id, product_name, sales
FROM (
  SELECT
    ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY sales DESC) AS rn,
    product_id, department_id, product_name, sales
  FROM
    products
) ranked_products
WHERE rn <= 2;</code>
登录后复制

此查询根据销售额为其部门内的每个产品分配排名 (rn),然后进行筛选以仅包含排名小于或等于 2 的产品。

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

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