PG 窗口函数

一,简介

窗口函数也叫分析函数,也叫OLAP函数,通过partition by分组,这里的窗口表示范围,,可以不指定PARATITION BY,会将这个表当成一个大窗口。

二,应用场景

1)用于分区排序

2)动态Group By

3Top N

4)累计计算

5)层次查询

三,窗口函数的种类

窗口函数大体可以分为以下两种:

1、能够作为窗口函数的聚合函数( SUM AVG COUNT MAX MIN )。

2、RANK DENSE _ RANK ROW _ NUMBER 等专用窗口函数

专用窗口函数:

(1)RANK函数

RANK 函数
计算排序时,如果存在相同位次的记录,则会跳过之后的位次,
并且占位。
比如:有 3 条记录排在第 1 位时:1 位、1 位、1 位、4 ……

DENSE_RANK 函数
同样是计算排序,即使存在相同位次的记录,也不
会跳过之后的位次。
比如:3 条记录排在第 1 位时:1 位、1 位、1 位、2 ……

记得有一道面试图是排序成绩,会有人并列并列名次,这个场景就需要用到DENSE_RANK函数。

ROW_NUMBER 函数
赋予唯一的连续位次,
不会出现并列名次。
比如:3 条记录排在第 1 位时:1 位、2 位、3 位、4 ……

四,窗口函数语法

select ename,job,sal,rank() over (PARTITION BY jobORDER BY  sal) as rankin
from emp; 

其中,可以把

    rank() over (PARTITION BY jobORDER BY  sal) 

一块看,然后起了一个别名。

PARTITION BY 能够设定分组和排序的对象范围。

为了按照工作进行分组和排序,指定了job。ORDER BY 能够指定按照哪一列、何种顺序进行排序。为了按照工资的升序进行排列,我们指定了sal

五,使用范围:只能在SELECT 子句当中

六,作为窗口函数使用的聚合函数

(1)进行累积结果

如:

select ename,sal,SUM(sal) over (ORDER BY ename) as current_sum
from emp;

使用 SUM 函数时,并不像 RANK 或者 ROW _ NUMBER 那样括号中的内容为空,需要在括号内指定作为汇总对象的列。

七,指定框架(汇总范围)

select name,price,avg (price) over (order by name rows 2 preceding) as moving_avg from product;

这里我们使用了 ROWS (“行”)PRECEDING (“之前”)两个关键字,将框架指定为“截止到之前 ~ 行”,因此“ ROWS 2 PRECEDING ”就是将框架指定为“截止到之前 2 行”,也就是将作为汇总对象的记录限定为如下的“最靠近的 3 ”。

最靠近的3行=自身(当前记录)+ 之前第1行的记录 + 之前第2行的记录

八,计算移动平均

由于框架是根据当前记录来确定的,因此和固定的窗口不同,其范围会随着当前记录的变化而变化。这样的统计方法称为移动平均(moving average)。由于这种方法在希望实时把握“最近状态”时非常方便,因此常常会应用在对股市趋势的实时跟踪当中。

使用关键字 FOLLOWING (“之后”)替换 PRECEDING ,就可以指定“截止到之后 ~ 行”作为框架了。

如:计算移动平均同时指定前后行

select name,price,avg (price) over (order by name rows between 1 preceding and 1 following) as moving_avg from product;

九,两个order by

OVER 子句中的 ORDER BY 只是用来决定窗口函数按照什么样的顺序进行计算的,对结果的排列顺序并没有影响。在 SELECT 语句的最后,使用 ORDER BY子句进行指定按照 ranking 列进行排列,结果才会顺序显示,但是如果使用了,会打乱原本窗口函数出来的显示结果。

所以,一般来说,在窗口函数里面用了order by,外面就不要再用order by了。

十,实操

1.建表语句

CREATE TABLE
testdb=# create table product_sale_all(
year CHAR(25) NOT NULL, -- 年份字段,字符类型CHAR
product_name VARCHAR(100) NOT NULL, -- 产品名称,字符类型VARCHAR
product_category VARCHAR(32) NOT NULL, --产品所属类别,字符类型VARCHAR
sale_num INT -- 产品销售额总和,整数类型INT
);

2.插入测试数据

下面在dbeaver中操作;

3.计算总销售额

4.各产品类别的累积销售额

如果按照产品类别进行分组,按照销售额降序,求累计至当前产品的销售额order_sale_sum。

5.各产品类别产品数

6.各产品类别的平均销售额

6.各产品销售金额排名

7.窗口函数-位移

如果我们按产品类别进行分组,组内按照销售额进行逆序排序,针对每一行,计算销售额排名前1位lag_product 和后1位产品lead_product:

8窗口函数分箱

如果我们要对记录进行分箱,也就是把记录切分为机组,就要用分享箱函数ntile。

ntile(n) 可以奖数据按照顺序划分为N组,各个组有编号,编号从1开始,对于每一行,ntile返回此行所属的组的编号,ntile(2)表示将表切分为2组,ntile也可以在partition by 分组后分箱,表示对当前的组内进行分箱。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/845114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【期末速成】——计算机组成原理(1)

目录 一、什么是计算机的组成 二、冯诺依曼体系结构计算机的特点 三、计算机系统的层次结构 四、机器语言、汇编语言、高级语言, 五、 编译程序、解释程序、汇编程序 六、已知主频、CPI计算程序运行时间 一、什么是计算机的组成 计算机的组成可以分为五个部件和两个信息…

Jvm(二)新生代和老年代与GC回收

目录 新生代和老年代 新生代 MinorGC 老年代(Old Generation) MajorGC Minor GC、Major GC 和 Full GC 三个GC具体区别和使用场景 JVM GC及内存调优的参数 调优建议 前言-与正文无关 ​ 生活远不止眼前的苦劳与奔波,它还充满了无…

多输入多输出非线性对象的模型预测控制—Matlab实现

本示例展示了如何在 Simulink 中设计多输入多输出对象的闭环模型预测控制。该对象有三个操纵变量和两个测量输出。 一、非线性对象的线性化 运行该示例需要同时安装 Simulink 和 Simulink Control Design。 % 检查是否同时安装了 Simulink 和 Simulink Control Design if ~m…

C语言 指针——指针变量做函数参数:错误案例分析

目录 计算最高分及其学号 计算最高分及其学号

【linux】开机调用python脚本

linux中,可以使用crontab 设置开机自动调用 crontab的安装在前面文章里写过了,不再重复 首先,还是进入crontab配置文件 crontab -e 进入之后,跟其他定时任务不同,只需要在时间配置那里用rebooot 这类之后的两个文件的…

2024最新群智能优化算法:红嘴蓝鹊优化器(Red-billed Blue Magpie Optimizer,RBMO)求解23个函数,提供MATLAB代码

一、红嘴蓝鹊优化器 红嘴蓝鹊优化器(Red-billed Blue Magpie Optimizer,RBMO)由Fu Shengwei 等人于2024年提出,其灵感来自红嘴蓝鹊的高效合作捕食行为,具体模拟了红嘴蓝鹊的搜索、追逐、攻击猎物和食物储存行为。 参考…

Windows Server安全配置

Windows Server操作系统安全配置,加固windows server。 1、密码安全 设置密码最小长度为10 开始-管理工具-本地安全策略-安全设置-账户策略-密码策略,修改密码长度最小值为10。 2、密码使用期限 设置密码最长使用期限为30天 开始-管理工具-本地安全策…

力扣2965. 找出缺失和重复的数字

题目: 给你一个下标从 0 开始的二维整数矩阵 grid,大小为 n * n ,其中的值在 [1, n] 范围内。除了 a 出现两次,b 缺失 之外,每个整数都恰好出现一次 。 任务是找出重复的数字a 和缺失的数字 b 。 返回一个下标从 0 开始…

CAC2.0全生命周期防护,助力企业构建安全闭环

5月29日,CACTER邮件安全团队凭借多年的邮件安全防护经验,在“防御邮件威胁-企业如何筑起最后防线”直播分享会上展示了构建安全闭环的重要性,并深入介绍了全新CAC 2.0中的“威胁邮件提示”功能。 下滑查看更多直播精彩内容 构建安全闭环的必要…

HackTheBox-Machines--Mirai

Mirai 测试过程 1 信息收集 NMAP 80 端口 指纹识别 目录扫描 http://10.129.141.121/versions http://10.129.141.121/admin 检查 /admin 下接口,发现 http://10.129.141.121/admin/index.php?login 请求,仅密码未知,可以尝试对密码进行爆…

Linux用docker安装ElasticsearchSpringBoot整合ES

一. 部署Elasticsearch 1. docker查询docker容器中的es docker search elasticsearch 2. 安装(PS:查看自己的springBoot的版本号 对应的es版本安装) docker pull elasticsearch:7.6.23. 查看已安装的docker镜像 docker images4. 创建挂…

2024ciscn初赛——easycms

什么是CMS? CMS是“Content Management System”的缩写,意为“内容管理系统”。网站的开发者为了方便,制作了不同种类的CMS,可以加快网站开发的速度和减少开发的成本。 常见的CMS: php类cms系统:dedecms、…

动态分配函数参数用二级指针的作用

文章目录 前言一、案例 前言 在一些情况下,我们需要在函数内部动态地分配内存来存储结构体,并且需要在函数外部访问该结构体。在这种情况下,可以使用二级指针作为函数参数来实现动态内存分配,并且在函数外部使用指针访问结构体。…

教育数字展馆助力全球教育传播,科技引领数字化教育潮流

一、教育数字展馆助力教育传播 1、提高教育资源的可及性 教育数字展馆通过VR和WEB3D技术,将丰富的教育资源呈现在用户面前。不论是名校的经典课程,还是专家的精彩讲座,均可通过教育数字展馆实现线上展示。用户只需登录平台,即可…

如何利用向量数据库来弥补 LLM 的弱点

向量数据库使企业能够以经济且可持续的方式调整通用大型语言模型以供组织特定使用。 译自 How to Cure LLM Weaknesses with Vector Databases,作者 Naren Narendran。 多年来,人们一直在猜测人工智能对企业产生的潜在影响。现在,我们看到来自…

远程工作/线上兼职网站整理(数字游民友好)

文章目录 国外线上兼职网站fiverrupwork 国内线上兼职网站甜薪工场猪八戒网云队友 国外线上兼职网站 fiverr https://www.fiverr.com/start_selling?sourcetop_nav upwork https://www.upwork.com/ 国内线上兼职网站 甜薪工场 https://www.txgc.com/ 猪八戒网 云队友 …

HarmonyOS 鸿蒙DevEco:导入无法运行提示Sync failed

场景:导入官网下载的案例后导入发现无法运行模拟机,Notifications提示Sync failed... 解决:查看Cause发现是版本问题,通过修改相关内容来解决该问题 1、打开案例地址找到hvigor文件夹 2、打开hvigor-config.json5,将&…

零基础入门学习Python第二阶04SQL详解01

SQL 和 MySQL 详解 SQL 详解 我们通常可以将 SQL 分为四类,分别是 DDL(数据定义语言)、DML(数据操作语言)、DQL(数据查询语言)和 DCL(数据控制语言)。DDL 主要用于创建…

无需开孔,安全美观:低功耗微波雷达模块开启宠物喂食器新未来

在快节奏的现代生活中,宠物已成为许多家庭的重要成员。然而,忙碌的主人常常为如何确保宠物按时进食而困扰。近年来,智能家居技术飞速发展,宠物喂食器也逐渐智能化,极大地方便了宠物主人。今天,我们要介绍的…

【qt】自定义对话框

自定义对话框 一.自定义对话框的使用1.应用场景2.项目效果3.界面拖放4.模型和视图的设置5.action功能实现 二.自定义对话框的创建1.设置对话框界面2.创建对话框 三.对话框的功能与样式实现1.对话框数据的交换2.对话框的显示3.设置对话框的特性4.完成按钮的功能 四.编辑表头的对…