Hive之聚合类开窗函数 + 滑动求和

为什么要写这样子一个主题文章呢,开窗函数毫无疑问,超级重要,但是很多人可能不会遇到一些稍微小众的业务需求,比如说滑动求和。这里带着业务,一并让大家熟悉一些,高阶函数的应用。

0,开窗函数和聚合函数的不同之处是什么?

◎普通的聚合函数用group by分组,
◎每个分组返回一个统计值,
◎而分析函数采用partition by分组,
◎并且每组每行都可以返回一个统计值。

一,聚合类开窗函数

1.1,基础语法

--语法格式是SUM  (字段1)   OVER  ( PARTITION BY 字段2  ORDER BY  字段3  desc/asc )

1.2,数据如下

A公司各部门员工的工资(24年6月)
部门 edptno员工 empno工资(元)SAL
AA0016K
AA0024K
AA0035K
CC1119K
CC1126.5K
CC1138K
CC1148.5K

1.3,代码如下

SELECT  E.DEPTNO    --部门
,E.EMPNO     --员工
,E.SAL       --工资
,SUM(E.SAL) OVER(PARTITION BY E.DEPTNO ORDER BY E.SAL )  AS S1 --按部门累加 
,SUM(E.SAL) OVER(PARTITION BY E.DEPTNO)  AS S2 --部门总和
,SUM(E.SAL) OVER(ORDER BY E.SAL)  AS S3  --全公司工资累加
,SUM(E.SAL) OVER()  AS S4  --公司工资总和 
FROM EMP E ;

1.4,结果展示

A公司各部门员工的工资(24年6月)
部门 edptno员工 empno工资(元)SAL

S1

按部门累加

S2

部门总和

S3

全公司工资累加

S4

公司工资总和

AA0014K4K15K4K47K
AA0025K9K15K9K47K
AA0036K15K15K15K47K
CC1116.5K6.5K32K21.5K47K
CC1128K14.5K32K29.5K47K
CC1138.5K23K32K38K47K
CC1149K32K32K47K47K


二,聚合类开窗函数(全)

2.1,语法介绍

OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化。

PRECEDING:往前

FOLLOWING:往后

CURRENT ROW:当前行

UNBOUNDED:起点

UNBOUNDED PRECEDING :表示从前面的起点

UNBOUNDED FOLLOWING:表示到后面的终点

FIRST_VALUE (col,true/ false):当前窗口下的第一个值,第二个参数 为 true ,跳过空值

LAST_VALUE (col,true/ false): 当前窗口下的最后一个值 ,第二个参数 为 true , 跳过空值

LAG(col,n,default_val):往前第n行数据

LEAD(col,n, default_val):往后第n行数据

2.2,代码示例

Select
id
,order_num
,sum(order_num) over (partition by id)  `分组内所有行`
,sum(order_num) over (partition by id order by dt) `从起点到当前行`
,sum(order_num) over (partition by id order by dt rows between unbounded preceding and current row) `默认为从起点到当前行`
,sum(order_num) over (partition by id order by dt rows between 3 preceding and current row) `当前行+往前3行`
,sum(order_num) over (partition by id order by dt rows between current row and 3 following) `当前行+往后3行`
,sum(order_num) over (partition by id order by dt rows between 3 preceding and 1 following) `当前行+往前3行+往后1行`
,sum(order_num) over (partition by id order by dt rows between current row and unbounded following) `当前行+往后所有行`
,max(order_num) over (partition by id order by dt rows between 3 preceding and 1 following) `当前行+往前3行+往后1行里面取最大`
,count(1) over (partition by id order by dt rows between 3 preceding and 1 following)    `当前行+往前3行+往后1行里面计数`
,avg(order_num) over (partition by id order by dt rows between 3 preceding and 1 following)    `当前行+往前3行+往后1行里面求平均数`
,first_value(order_num) over (partition by id order by dt rows between 3 preceding and 1 following) `当前行+往前3行+往后1行第1个值`
,last_value(order_num) over (partition by id order by dt rows between 3 preceding and 1 following ) `当前行+往前3行+往后1行第最后1个值` 
from tmp.table_test;

 2.3,结果展示

ok,如果你sql技能比较强,那么看完上面几张图,你大概就能懂得很多的技巧了。

三,滑动求和

关于滑动求和,涉及业务性强,很重要,上面2.2代码也展示到了,还是接着再分享些案例。

那么滑动求和,在实际的业务之中是什么样子的呢???

3.1,滑动求和代码如下

3.2,代码解析

很显然,上述代码先套个子查询,求出在最近一年的时间里,每天的公募私募产品的总保有量;

然后对其使用max()over() 开窗函数:

rows betwwen 29 perceding and current row ,是求出在前30天(包括当天),各保有量的最大值。

rows betwwen 354 perceding and current row ,是求出在前365天(包括当天),各保有量的最大值。

3.3,业务场景:

就是把公募私募产品,最近一个月,和最近一年的最大保有量,开窗展示出来。

=====================================================

欢迎一键三连!

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

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

相关文章

【JAVA SE】抽象类和接口

✨✨欢迎大家来到Celia的博客✨✨ 🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉 所属专栏:JAVA 个人主页:Celias blog~ 目录 引言 一、抽象类 1.1 抽象类的定义 1.2 抽象方法 1.3 抽象…

大厂边缘组VS小厂核心组,要怎么选?

有问必答 最近有粉丝提问:大厂边缘组VS小厂核心组,怎么选? 这确实是个好问题,读者老爷们可以先问下自己:如果有一份月薪2W在大厂边缘组打螺丝的Offer且不加班,另外还有一份月薪2W5,在小厂核心…

华为坤灵管理型交换机S300,S500,S310,S210,S220,S200 web端开局配置

一. 准备线缆 笔记本或没有COM口的电脑,需准备转接线,并安装好随线光盘的驱动,检查设备管理器中COM口是否正常 2.连接电脑与交换机的CONSOLE口 二,准备软件putty。 Download PuTTY: latest release (0.81) 配置步骤如下: 开启HTTP服务。设置https://1…

【conda】解决conda activate无效的问题

conda activate 虚拟环境名字执行上述命令失效,提示如下信息: 经查询,原因是新版的 conda 不再使用 activate 来激活虚拟环境,而是改用: source activate 虚拟环境名退出虚拟环境还是: conda deactivate…

sqlite基本操作

简介 文章目录 简介1.数据库的安装2.数据库命令:API,创建表单代码 csprintf()getchar和scanf() 1.数据库的安装 sudo dpkg -i *.deb这个报错表明出现依赖问题 用这个命令后再试试sudo apt --fix-broken in…

计算机组成原理----浮点数的表示和运算

目录 一.浮点数的表示 1.浮点数的作用和基本原理 2.浮点数的规格化 3.浮点数的表示范围 二.IEEE 754标准 三.浮点数的加减运算 1.加减运算 2.强制类型转换 一.浮点数的表示 1.浮点数的作用和基本原理 定点数在字节数固定的情况下,能表示的数字是很有限的&…

输入15个整数,计算并输出15个整数的和,并输出其中最大值和最小值;

输入15个整数&#xff0c;计算并输出15个整数的和&#xff0c;并输出其中最大值和最小值&#xff1b; #include<stdio.h> int main() {int i0,s0,max,min,jg0,jp0,og0,omax; int a[15]{12,13,14,16,17,18,19,10,1,2,3,4,5,6,7}; maxa[0],mina[0]; for(i0,s0;i<15;i) …

BIT 2024 编译原理 Lab. 4 四代编译器实验说明和要求

实验四&#xff1a;四代编译器实验 一、实验要求 详细实验要求请参考文件《Lab4实验说明和要求.pdf》。 二、实验思路 1、与 lab3 的对比 如果你在 lab3 就已经像我一样单独写了个函数处理表达式&#xff0c;那么理论上&#xff0c;lab4 相比于 lab3&#xff0c;不过就是多…

ComfyUi安装OOTDiffusion插件的diffusers版本问题

OOTDiffusion换装 在github上有近5K的star了&#xff08;https://github.com/levihsu/OOTDiffusion&#xff09;。 diffusers版本问题 最新版是0.27.2&#xff0c;不能低于0.25&#xff0c;但是OOT换装需要0.24&#xff0c;否则会报错&#xff1a; ComfyUI\custom_nodes\Comf…

系统架构设计师【第14章】: 云原生架构设计理论与实践 (核心总结)

文章目录 14.1 云原生架构产生背景14.2 云原生架构内涵14.2.1 云原生架构定义14.2.2 云原生架构原则14.2.3 主要架构模式14.2.4 典型的云原生架构反模式 14.3 云原生架构相关技术14.3.1 容器技术14.3.2 云原生微服务14.3.3 无服务器技术14.3.4 服务网格 14.4 云原生…

HTML+CSS 文本动画卡片

效果演示 实现了一个图片叠加文本动画效果的卡片&#xff08;Card&#xff09;布局。当鼠标悬停在卡片上时&#xff0c;卡片上的图片会变为半透明&#xff0c;同时显示隐藏在图片上的文本内容&#xff0c;并且文本内容有一个从左到右的渐显动画效果&#xff0c;伴随着一个白色渐…

YOLOV10训练自己的数据集

*************************************************** 码字不易&#xff0c;收藏之余&#xff0c;别忘了给我点个赞吧&#xff01; *************************************************** Start YOLOV10训练自己的数据集 官方论文&#xff1a;https://arxiv.org/abs/2405…

使用busybox快速创建rootfs系统(硬件:atk-dl6y2c)

目录 概述 1 编译busybox 1.1 配置Makefile 1.2 需改参数 1.3 配置busybox 1.4 编译busybox 2 完善 rootfs下文件 2.1 rootfs 的“/lib”目录添加库文件 2.2 rootfs 的“usr/lib”目录添加库文件 2.3 创建其他目录 3 完善其他文件 3.1 完善etc/init.d/rcS 3.2 完善…

Golang | Leetcode Golang题解之第128题最长连续序列

题目&#xff1a; 题解&#xff1a; func longestConsecutive(nums []int) int {numSet : map[int]bool{}for _, num : range nums {numSet[num] true}longestStreak : 0for num : range numSet {if !numSet[num-1] {currentNum : numcurrentStreak : 1for numSet[currentNum…

【CMake】CMake入门(五)打包安装程序 使用CMake管理库 打包调试版和发行版

本篇文章不是新手入门教学文章&#xff0c;主要是记录笔者个人的学习笔记 CMake入门&#xff08;五&#xff09; 一、打包二、使用CMake管理库三、打包调试版和发行版 一、打包 发布程序可以有多种形式&#xff0c;比如安装包、压缩包、源文件等。CMake也提供了打包程序cpack可…

金钱的认知,你如何理解呢?

金钱的认知 建立在金钱之上的爱情是纯真的爱&#xff0c;朋友关系也才够纯粹&#xff0c;才是单纯的世界&#xff0c;反之没了钱的条件爱情和友情的美好关系极易破碎&#xff0c;也极易反目成仇。 心若美好钱就美好&#xff0c;心有欲望狰狞钱就是只咬人的老虎&#xff0c;钱…

Linux 僵尸进程和孤儿进程

一.Z(zombie)-僵尸进程 1.僵死状态&#xff08;Zombies&#xff09;是一个比较特殊的状态。当进程退出并且父进程&#xff08;使用wait()系统调用后&#xff09;没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 2.僵死进程会以终止状态保持在进程表中&#xff0c;并且会…

Java17 --- SpringCloud之seate

目录 一、创建seata需要的mysql数据库表 二、修改seata的配置文件 三、启动nacos及seata 四、创建需要的数据库及表 一、创建seata需要的mysql数据库表 CREATE DATABASE seata;CREATE TABLE IF NOT EXISTS global_table(xid VARCHAR(128) NOT NULL,…

C++ | Leetcode C++题解之第128题最长连续序列

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestConsecutive(vector<int>& nums) {unordered_set<int> num_set;for (const int& num : nums) {num_set.insert(num);}int longestStreak 0;for (const int& num : num_set) {…

隐马尔可夫链

1 马尔可夫链 马尔科夫链&#xff08;Markov Chain&#xff09;是一种数学模型&#xff0c;它描述了一系列可能事件的概率&#xff0c;其中每个事件的发生仅依赖于前一个事件的状态。这一特性称为“无记忆性”或“马尔可夫性质”。我将用一个简单的天气预测模型作为例子来解释马…