首页 > 数据库 >GBase与梧桐数据库窗口函数使用的比较

GBase与梧桐数据库窗口函数使用的比较

时间:2024-11-04 16:15:53浏览次数:5  
标签:over 梧桐 数据库 partition cnt GBase user sale id

一、前言

  窗口函数可以进行复杂的数据分析,使数据处理变得更加灵活和强大。通过这些函数,用户可以在不同的窗口范围内对数据进行汇总、平均、计数等操作,以下介绍一些常用的窗口函数分别在梧桐数据库和GBase数据库中的使用。

二、创建测试用例

  为更好的体现函数的使用,现创建一个测试表来验证各类窗口函数的使用及返回结果;

1、建表

-- gbase数据库建表create table rows_test 
(
user_id varchar(10),    --用户idprod_id varchar(10),    --产品idsale_cnt decimal(10,0)  --销售数量);-- 梧桐数据库建表create table rows_test 
(
user_id character varying(10),  --用户idprod_id character varying(10),  --产品idsale_cnt numeric(10,0)          --销售数量);

2、测试用例

insert into rows_test values('AAA','pd_1',2),
('AAA','pd_2',5),
('BBB','pd_1',1),
('BBB','pd_2',2),
('BBB','pd_3',3),
('CCC','pd_1',3),
('CCC','pd_3',4),
('DDD','pd_1',2),
('DDD','pd_3',4);--梧桐数据库与GBase数据插入语法相同

三、排序类窗口函数

1、简介

  排序类窗口函数常用的有 row_number()、rank()、dense_rank();

  • row_number():为每个行分配一个唯一的连续整数,从1开始。它不会为任何行跳过数字,即使有并列(ties)也不会跳过;

  • rank() :在遇到并列时会为相同的值分配相同的排名,并且后续的排名会跳过已使用的数字。例如,如果有两行并列第一,它们的排名都是1,下一行的排名会是3,而不是2;

  • dense_rank():在处理并列时会为相同的值分配相同的排名,并且下一个排名会紧接着上一个排名,即使有并列也不会跳过数字;

2、函数使用

  以产品 ‘prod_1’ 的销售数量对用户进行排名,分别使用上述函数实现:

梧桐数据库与GBase数据库语法相同,不做重复赘述

select *,row_number() over(partition by prod_id order by sale_cnt desc) row_id 
from rows_test ;select *,rank() over(partition by prod_id order by sale_cnt desc) rank_id 
from rows_test ;select *,dense_rank() over(partition by prod_id order by sale_cnt desc) dense_rank_id 
from rows_test ;

梧桐数据库执行结果

GBase 执行结果

  • over 子句用来定义窗口的分区及排序方式

  • partition by 定义排序分区

  • order by 定义排序方式

如上结果:

row_number() 会为每一行赋予一个整数不会跳过,当排序条件相同时,会随机一行排序;

rank()在排序条件相同时会赋予相同的值,下一个值会跳过;

dense_rank()在排序条件相同时会赋予相同的值,下一个值会接上一个;

四、统计类窗口函数

  统计类窗口函数常用的有 count()、sum()、avg()、max()、min() 等,其效果与聚合函数相同,具体如下:

  • sum(column_1) :对 column_1 字段求和,字段必须是整型或浮点型;

  • count(column_1):对 column_1 字段计数;

  • avg(column_1):对 column_1 字段求平均值,字段必须是整型或浮点型;

  • max(column_1):对 column_1 字段求最大值,字段是整型或浮点型,也可是字符串;

  • min(column_1):对 column_1 字段求最小值,字段是整型或浮点型,也可是字符串;

示例:

select *,sum(sale_cnt) over (partition by user_id),count(prod_id) over (partition by user_id),avg(sale_cnt) over (partition by user_id),max(sale_cnt) over (partition by user_id),min(sale_cnt) over (partition by user_id)from rows_test

示例解释:

  • sum(sale_cnt) over (partition by user_id)以用户id为分区计算销量的和,返回值为用户所有产品销量的和;

  • count(prod_id) over (partition by user_id)以用户id为分区计算销售产品数量,返回值为用户销售的产品个数;

  • avg(sale_cnt) over (partition by user_id)以用户id为分区计算销售产品销量的平均值,返回值为用户平均每个产品的销量;

  • max(sale_cnt) over (partition by user_id)以用户id为分区计算产品最大销量,返回值为用户销售最多的产品个数;

  • min(sale_cnt) over (partition by user_id)以用户id为分区计算销售产品数量,返回值为用户销售最少的产品个数;

梧桐数据库测试结果如图:

五、总结

  对比梧桐数据库与GBase数据窗口函数的语法及使用基本相同,其避免了使用子查询或连接,可以显著提高查询性能;提供了对数据进行灵活分析的能力,可以轻松适应不同的数据分析需求,增强了数据的分析能力;

  窗口函数的应用场景也非常广泛,可以用于各种数据分析和处理任务;例如通过排序类函数可以计算套餐销量top;地市、区县业务发展情况的top等;汇总、累计类函数可以统计用户出账等收入分析。

标签:over,梧桐,数据库,partition,cnt,GBase,user,sale,id
From: https://blog.csdn.net/weixin_38597918/article/details/143485941

相关文章

  • 华为云开源时序数据库openGemini:使用列存引擎解决时序高基数问题
    本文来源:《华为云DTSE》第五期开源专刊,作者:向宇,华为云数据库高级研发工程师、黄飞腾,博士,openGemini存储引擎架构师在时序数据场景中,大部分的解决方案是以时间线为粒度对时序数据进行管理,这类解决方案在时间线数量不断增长的情形下,面临着诸多困难,包括内存膨胀、读写性能下降等,华为......
  • SpringBoot社区场地管理系统54217 本系统(程序+源码+数据库+调试部署+开发环境)带论文文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:用户,场地信息,场地事务,场地预约,社区活动,活动记录开题报告内容一、选题背景与意义随着城市化进程的加快,社区场地资源的管理显得愈发重要。传统的场......
  • SpringBoot社区常驻居民信息管理软件c3w65 程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:社区主任,操作员,社区信息,楼房信息,公告信息开题报告内容一、项目背景与意义随着城市化进程的加快,社区作为城市的基本单元,其管理效率与质量直接影响......
  • 如何快速定位Windows微信客户端数据库加密秘钥偏移地址
     手工获取网上涉及如何调试微信客户端获取数据库加密key的教程很多,但是每次微信版本更新后都要调试肯定会比较麻烦,但是有一个问题是这个key其实不是经常变更的,具体如何变更我也不清楚,可能是改密码?因此我们可以直接使用CheatEngine等内存搜索工具直接搜索之前获取的key,这样......
  • 学习011-08-15 Connect an XAF Application to a Database Provider(将 XAF 应用程序连
    ConnectanXAFApplicationtoaDatabaseProvider(将XAF应用程序连接到数据库提供程序)Whenanapplicationrunsforthefirsttime,itsdatabaseiscreatedautomatically.Duringthefollowingrunsinadebugmode,theapplicationconnectstothesamedata......
  • Ei数据库检索证明开具
    Pre:以EI收录的会议论文为例。1.进入Ei数据库https://www.engineeringvillage.com/home.url?redir=t点击Checkaccess进入登陆(需要学校等组织认证访问)2.输入需要开具检索的论文Title3.找到你的论文(以kaiming大神的ResNet为例)导出为PDF文件即可。参考He,Kaiming,et......
  • 宝塔安装mysql5.7数据库怎么连不上
    如果你在使用宝塔面板安装了MySQL5.7后遇到连接问题,可以按照以下步骤进行排查和解决:检查MySQL服务状态:登录宝塔面板,进入“软件商店”查看MySQL服务是否已启动。如果未启动,尝试点击“启动”按钮。检查MySQL配置文件:进入MySQL的配置文件my.cnf,通常位于/etc/my.cnf或/et......