首页 > 数据库 >【数据库】对大数据量数据集,PostgreSQL分组统计数量,使用 row_number() over

【数据库】对大数据量数据集,PostgreSQL分组统计数量,使用 row_number() over

时间:2024-01-29 23:32:07浏览次数:24  
标签:product PostgreSQL over number num 分组 数据量 id row

在处理大数据量数据集时,我们经常需要进行分组统计。而在 PostgreSQL 中,我们可以使用 row_number() 函数结合 over (partition by) 子句来实现这个功能。同时,通过设置 row_num <= 100 的条件,我们可以限定每组最多数量为 100。本文将详细介绍如何使用这种方法进行分组统计。

一、row_number() 函数简介

row_number() 函数是 PostgreSQL 中的一个窗口函数,它的作用是为每一行分配一个唯一的序号。当涉及到分组统计时,我们可以使用 row_number() 函数结合 over (partition by) 子句来实现。

row_number() 函数的语法如下:

ROW_NUMBER() OVER (
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
)

其中,PARTITION BY 子句用于指定分组条件,ORDER BY 子句用于指定排序条件。

二、使用 row_number() over (partition by) 进行分组统计

假设我们有一个名为 sales 的表,包含以下字段:product_id(产品 ID)、sale_date(销售日期)和 quantity(销售数量)。我们想要统计每个产品的销售数量,但是每组最多只显示前 100 条记录。可以使用以下 SQL 语句实现:

SELECT product_id, sale_date, quantity,
       ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY sale_date DESC) AS row_num
FROM sales;

在这个例子中,我们首先使用 PARTITION BY product_id 对数据进行分组,然后使用 ORDER BY sale_date DESC 对每个分组内的数据按照销售日期降序排序。接着,我们使用 ROW_NUMBER() 函数为每一行分配一个唯一的序号。最后,我们将结果输出到一个新的表中。

三、使用 row_num <= 100 限定每组最多数量

在上面的例子中,我们已经实现了对每个产品的销售数量进行分组统计,并且每组最多只显示前 100 条记录。接下来,我们需要进一步优化 SQL 语句,以便在查询时就限制每组的数量。可以使用以下 SQL 语句实现:

WITH ranked_sales AS (
    SELECT product_id, sale_date, quantity,
           ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY sale_date DESC) AS row_num
    FROM sales
)
SELECT product_id, sale_date, quantity
FROM ranked_sales
WHERE row_num <= 100;

在这个例子中,我们首先使用 WITH 子句创建一个名为 ranked_sales 的临时表,该表包含了原始数据以及每个产品销售数量的排名信息。然后,我们在查询时直接从临时表中筛选出 row_num <= 100 的记录。这样,我们就可以在查询时就限制每组的数量,提高查询效率。

四、总结

通过使用 row_number() 函数结合 over (partition by) 子句,我们可以在 PostgreSQL 中实现分组统计的功能。同时,通过设置 row_num <= 100 的条件,我们可以限定每组最多数量为 100。这种方法不仅可以提高查询效率,还可以方便地对数据进行分组统计。

标签:product,PostgreSQL,over,number,num,分组,数据量,id,row
From: https://blog.51cto.com/u_15786919/9473823

相关文章

  • 【数据库】对大数据量数据集,PostgreSQL分组统计数量,使用 row_number() over
    在处理大数据量数据集时,我们经常需要进行分组统计。而在PostgreSQL中,我们可以使用row_number()函数结合over(partitionby)子句来实现这个功能。同时,通过设置row_num<=100的条件,我们可以限定每组最多数量为100。本文将详细介绍如何使用这种方法进行分组统计。一、row......
  • PostgreSQL 格式化日志输出
    PostgreSQLstderr日志记录,修改postgresql.cfg中的log_line_prefix:log_line_prefix='%m[pid=%p]%q[txid=%x]%u@%d'--输出结果如下2024-06-2017:17:52.988CEST[pid=19718][txid=0]dbausers@testLOG:statement:INSERTINTOchildVALUES(100,1,'newch......
  • Linux环境安装postgresql
    一、资源包下载1.1、官网下载地址https://www.postgresql.org/ftp/source/ 1.2上传安装包,并解压#.tar.gz后缀:tar-zxvf文件名#.tar.xz后缀:tar-Jxvf文件名#-C后面是解压后存放的目录​tar-xvfpostgresql-15.3.tar.gz-C/data/database/postgresql/package......
  • C. Did We Get Everything Covered
    原题链接前情提要限于自身知识水平的储备不足,无法对这道题的贪心算法做出一个证明,待来日学识渐长把这个证明写下题解我们可以把字符串s分成若干区间,每一区间对应一位数字的储备已知长度为n,那我们就一位一位地遍历,一旦所有元素遍历齐就开始下一位的遍历,因为再往后遍历也不起作......
  • PostgreSQL技术大讲堂 - 第43讲:流复制原理
       PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUGPG技术大讲堂。 第43讲:流复制原理 PostgreSQL第43讲:1月27日(周六)1......
  • [原创]Windows安装配置PostgreSql_15.5.1数据库
    [原创]Windows安装配置PostgreSql_15.5.1数据库   PostgreSql数据库有多种安装方式,windows上常用的是installer方式、binary手动安装方式,本文采用手动安装的方式处理。总体过程比较简单,有mysql配置经验的分分钟的事儿。    一、下载并解压文件到具体安装目录。 ......
  • NVMe over RoCE
    1.概览网络从协议的角度上来说,分为应用层(http)传输层(tcp/udp)网络层(ip,路由,拥塞)数据链路层(mac,以太网,交换机)物理层NVMeoverRoCE,全称:Non-VolatileMemoryExpressoverRDMAoverConvergedEthernetRoCE通过以太网来传播,基于ipv4/v6,FCoE(以太网光纤通道)等。工作......
  • 大数据量插入、更新改成批量模式
    可以看出实际应用场景中储位数据量比较大,优先优化储位相关接口本机环境优化前耗时:储位个数3200update时间28578insert时间21758    本机环境优化后耗时:储位个数3200update时间5169insert时间1733    将数据库连接......
  • element upload avator hover 有遮罩层 删除和预览按钮 选项
    hover:<divclass="upload"><el-uploadclass="avatar-uploader":on-success="handleAvatarSuccess"><imgv-if="ruleForm.imageUrl":src="ruleForm.image......
  • docker安装pg(postgresql)
    拉取镜像dockerpullpostgres:15.5创建本地卷或创建挂载目录(/docker/postgresql/data)dockervolumecreatepgdata数据卷可以在容器之间共享和重用,默认会一直存在,即使容器被删除(dockervolumeinspectpgdata可查看数据卷的本地位置,如果使用该方式创建可查看创建成功......