Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Hive窗口函数01-SUM、MIN、MAX、AVG

Hive窗口函数01-SUM、MIN、MAX、AVG

作者头像
CoderJed
发布于 2018-09-13 02:59:52
发布于 2018-09-13 02:59:52
2.8K00
代码可运行
举报
文章被收录于专栏:Jed的技术阶梯Jed的技术阶梯
运行总次数:0
代码可运行

Hive窗口函数sum、min、max、avg入门

1. 数据说明

现有 hive 表 cookie1, 内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hive> select * from cookie1;
cookie1 2015-04-10  1
cookie1 2015-04-11  5
cookie1 2015-04-12  7
cookie1 2015-04-13  3
cookie1 2015-04-14  2
cookie1 2015-04-15  4
cookie1 2015-04-16  4
  • 其中字段意义: cookieid(string), createtime(string), pv(int)
  • 分别代表: cookieid, 创建时间, 该cookieid当天的pv值

2. sum()操作

(1) 对组内的某个字段的全部数据进行累加,例如,求cookie1的总pv值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select cookieid, createtime, pv, 
sum(pv) over(partition by cookieid) as sum1 
from cookie1; 

结果:
cookie1 2015-04-16  4   26
cookie1 2015-04-15  4   26
cookie1 2015-04-14  2   26
cookie1 2015-04-13  3   26
cookie1 2015-04-12  7   26
cookie1 2015-04-11  5   26
cookie1 2015-04-10  1   26

partition by cookieid : 按照cookieid分组

(2) 从第一行开始累加到当前行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select cookieid, createtime, pv, 
sum(pv) over(partition by cookieid order by createtime) as sum2
from cookie1;

# 结果
cookie1 2015-04-10  1   1
cookie1 2015-04-11  5   6
cookie1 2015-04-12  7   13
cookie1 2015-04-13  3   16
cookie1 2015-04-14  2   18
cookie1 2015-04-15  4   22
cookie1 2015-04-16  4   26

以上SQL语句是下面这个SQL语句的简写:
select 
    cookieid,
    createtime,
    pv, 
    sum(pv) over(partition by cookieid order by createtime rows between unbounded preceding and current row) as sum3
from cookie1;

order by : 在同一个组内,先累加完相同createtime的pv,再累加其他createtime的pv, 比如 : 现在在表末尾加一条数据cookie1 2015-04-10 1 1,那么结果就是 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cookie1 2015-04-10  1   1
cookie1 2015-04-10  1   2
cookie1 2015-04-11  5   7
cookie1 2015-04-12  7   14
cookie1 2015-04-13  3   17
cookie1 2015-04-14  2   19
cookie1 2015-04-15  4   23
cookie1 2015-04-16  4   27

cookie1 2015-04-10 1 1这两条数据是否相邻无关。

unbounded : 起点 preceding : 往前 following : 往后 between...end... : 指定操作的范围 current row : 当前行,计算到哪一行就是哪一行 between unbounded preceding and current row : 从起点到当前行,往前(对应表中的从上到下的顺序)累加 默认就是从起点到当前行往前累加,所以between unbounded preceding and current row这个条件可以不写。

(3) 计算分组内当前行到剩余所有行的和

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select cookieid, createtime, pv, 
sum(pv) over(partition by cookieid order by createtime rows between current row and unbounded following) as sum4
from cookie1; 

结果分析 : 
cookie1 2015-04-10  1   26  (1+5+7+3+2+4+4=26)
cookie1 2015-04-11  5   25  (5+7+3+2+4+4=25)
cookie1 2015-04-12  7   20  (7+3+2+4+4=20)
cookie1 2015-04-13  3   13  (3+2+4+4=13)
cookie1 2015-04-14  2   10  (2+4+4=10)
cookie1 2015-04-15  4   8   (4+4=8)
cookie1 2015-04-16  4   4   (4)

(4) 指定计算的范围

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select cookieid, createtime, pv, 
sum(pv) over(partition by cookieid order by createtime rows between 3 preceding and current row) as sum5
from cookie1; 

结果分析 : 
cookie1 2015-04-10  1   1   (这一行前面没有记录,只能取本身的值)
cookie1 2015-04-11  5   6   (这一行前面有1,不够取3行的值,只能取一行与本身相加,取5+1=6)
cookie1 2015-04-12  7   13  (这一行前面有15,不够取3行的值,只能取两行与本身相加,取7+5+1=13)
cookie1 2015-04-13  3   16  (这一行前面有3行可以取,依次往回取三行,取3+7+5+1=16)
cookie1 2015-04-14  2   17  (同理,取2+3+7+5=17)
cookie1 2015-04-15  4   16  (同理,取4+2+3+7=16)
cookie1 2015-04-16  4   13  (同理,取4+4+2+3=13)

select cookieid, createtime, pv, 
sum(pv) over(partition by cookieid order by createtime rows between 3 preceding and 1 following) as sum6
from cookie1; 

结果分析 : 
cookie1 2015-04-10  1   6   (这一行前面没有记录,后面可以取一条记录,1+5=6)
cookie1 2015-04-11  5   13  (这一行前面只能取一条记录,后面可以取一条记录,1+5+7=13)
cookie1 2015-04-12  7   16  (这一行前面只能取两条记录,后面可以取一条记录,1+5+7+3=16)
cookie1 2015-04-13  3   18  (这一行前面可以取三条记录,后面可以取一条记录,1+5+7+3+2=18)
cookie1 2015-04-14  2   21  (同理,5+7+3+2+4=21) 
cookie1 2015-04-15  4   20  (同理,7+3+2+4+4=20)
cookie1 2015-04-16  4   13  (这一行前面可以取三条记录,后面没有记录,3+2+4+4=13)

3. avg()操作

sum、avg、max、min这些窗口函数的语法都是一样的,以下用一个SQL语句来演示 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select cookieid,createtime,pv,
avg(pv) over(partition by cookieid) as avg1,
avg(pv) over(partition by cookieid order by createtime) as avg2,
avg(pv) over(partition by cookieid order by createtime rows between unbounded preceding and current row) as avg3,
avg(pv) over(partition by cookieid order by createtime rows between current row and unbounded following) as avg4,
avg(pv) over(partition by cookieid order by createtime rows between 3 preceding and current row) as avg5,                
avg(pv) over(partition by cookieid order by createtime rows between 3 preceding and 1 following) as avg6
from cookie1;

结果 : 
cookie1 2015-04-10  1       3.7142857142857144      1.0                 1.0                 3.7142857142857144      1.0                 3.0
cookie1 2015-04-11  5       3.7142857142857144      3.0                 3.0                 4.166666666666667       3.0                 4.333333333333333
cookie1 2015-04-12  7       3.7142857142857144      4.333333333333333   4.333333333333333   4.0                     4.333333333333333   4.0
cookie1 2015-04-13  3       3.7142857142857144      4.0                 4.0                 3.25                    4.0                 3.6
cookie1 2015-04-14  2       3.7142857142857144      3.6                 3.6                 3.3333333333333335      4.25                4.2
cookie1 2015-04-15  4       3.7142857142857144      3.6666666666666665  3.6666666666666665  4.0                     4.0                 4.0
cookie1 2015-04-16  4       3.7142857142857144      3.7142857142857144  3.7142857142857144  4.0                     3.25                3.25

4. min()操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select cookieid, createtime, pv,
min(pv) over(partition by cookieid) as min1,
min(pv) over(partition by cookieid order by createtime) as min2, 
min(pv) over(partition by cookieid order by createtime rows between unbounded preceding and current row) as min3,
min(pv) over(partition by cookieid order by createtime rows between current row and unbounded following) as min4,
min(pv) over(partition by cookieid order by createtime rows between 3 preceding and current row) as min5,
min(pv) over(partition by cookieid order by createtime rows between 3 preceding and 1 following) as min6
from cookie1;

结果 : 
cookie1 2015-04-10  1   1   1   1   1   1   1
cookie1 2015-04-11  5   1   1   1   2   1   1
cookie1 2015-04-12  7   1   1   1   2   1   1
cookie1 2015-04-13  3   1   1   1   2   1   1
cookie1 2015-04-14  2   1   1   1   2   2   2
cookie1 2015-04-15  4   1   1   1   4   2   2
cookie1 2015-04-16  4   1   1   1   4   2   2

5. max()操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select cookieid,createtime,pv,
max(pv) over(partition by cookieid) as max1,
max(pv) over(partition by cookieid order by createtime) as max2,
max(pv) over(partition by cookieid order by createtime rows between unbounded preceding and current row) as max3,
max(pv) over(partition by cookieid order by createtime rows between current row and unbounded following) as max4,
max(pv) over(partition by cookieid order by createtime rows between 3 preceding and current row) as max5,
max(pv) over(partition by cookieid order by createtime rows between 3 preceding and 1 following) as max6
from cookie1;

结果 : 
cookie1 2015-04-10  1   7   1   1   7   1   5
cookie1 2015-04-11  5   7   5   5   7   5   7
cookie1 2015-04-12  7   7   7   7   7   7   7
cookie1 2015-04-13  3   7   7   7   4   7   7
cookie1 2015-04-14  2   7   7   7   4   7   7
cookie1 2015-04-15  4   7   7   7   4   7   7
cookie1 2015-04-16  4   7   7   7   4   4   4

参考文章 : Hive分析窗口函数(一) SUM,AVG,MIN,MAX

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.12.15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Hive窗口函数02-NTILE、ROW_NUMBER、RANK、DENSE_RANK
Hive窗口函数NTILE、ROW_NUMBER、RANK、DENSE_RANK入门
CoderJed
2018/09/13
1.5K0
Hive窗口函数/分析函数详解
在sql中有一类函数叫做聚合函数,例如sum()、avg()、max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的。但是有时我们想要既显示聚集前的数据,又要显示聚集后的数据,这时我们便引入了窗口函数。窗口函数又叫OLAP函数/分析函数,窗口函数兼具分组和排序功能。
五分钟学大数据
2021/03/04
8960
Hive窗口函数/分析函数详解
hive窗口函数/分析函数详细剖析
在sql中有一类函数叫做聚合函数,例如sum()、avg()、max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的。但是有时我们想要既显示聚集前的数据,又要显示聚集后的数据,这时我们便引入了窗口函数。窗口函数又叫OLAP函数/分析函数,窗口函数兼具分组和排序功能。
五分钟学大数据
2021/01/21
9750
hive窗口函数/分析函数详细剖析
Hive学习-lateral view 、explode、reflect和窗口函数
然后挂了FAILED: SemanticException [Error 10081]: UDTF's are not supported outside the SELECT clause, nor nested in expressions
顾翔
2024/09/10
4620
Hive学习-lateral view 、explode、reflect和窗口函数
2021年大数据Hive(七):Hive的开窗函数
DENSE_RANK() 生成数据项在分组中的排名,排名相等会在名次中不会留下空位
Lansonli
2021/10/11
7660
Hive根据用户自定义函数、reflect函数和窗口分析函数
(2)UDAF(User-Defined Aggregation Function)
顾翔
2024/09/10
4000
Hive根据用户自定义函数、reflect函数和窗口分析函数
不要到处翻了 | Hive开窗函数总结与实践
平常我们使用 hive或者 mysql时,一般聚合函数用的比较多。但对于某些偏分析的需求,group by可能很费力,子查询很多,这个时候就需要使用窗口分析函数了~ 注:hive、oracle提供开窗函数,mysql8之前版本不提供,但Oracle发布的 MySQL 8.0版本支持窗口函数(over)和公用表表达式(with)这两个重要的功能!
大数据真好玩
2021/01/26
6.2K0
Spark SQL/Hive实用函数大全
本篇文章主要介绍Spark SQL/Hive中常用的函数,主要分为字符串函数、JSON函数、时间函数、开窗函数以及在编写Spark SQL代码应用时实用的函数算子五个模块。
大数据学习与分享
2020/12/31
5.1K0
Hive窗口函数保姆级教程
在SQL中有一类函数叫做聚合函数,例如sum()、avg()、max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的。但是有时我们想要既显示聚集前的数据,又要显示聚集后的数据,这时我们便引入了窗口函数。窗口函数又叫OLAP函数/分析函数,窗口函数兼具分组和排序功能。
五分钟学大数据
2021/07/07
2.6K0
Hive窗口函数保姆级教程
Hive的利器:强大而实用的开窗函数
与聚合函数类似,开窗函数也是对行集组进行聚合计算。但是它不像普通聚合函数那样,每组通常只返回一个值,开窗函数可以为每组返回多个值,因为开窗函数所执行聚合计算的行集组是窗口。
大数据学习与分享
2021/04/22
3.5K0
Hive的利器:强大而实用的开窗函数
一文学完所有的Hive Sql(两万字最全详解)
lateral view用于和split、explode等UDTF一起使用的,能将一行数据拆分成多行数据,在此基础上可以对拆分的数据进行聚合,lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一行或者多行,lateral view在把结果组合,产生一个支持别名表的虚拟表。
五分钟学大数据
2021/04/02
3.2K0
Hive窗口函数04-LAG、LEAD、FIRST_VALUE、LAST_VALUE
Hive窗口函数LAG、LEAD、FIRST_VALUE、LAST_VALUE入门
CoderJed
2018/09/13
2.2K0
Hive窗口函数05-GROUPING SETS、GROUPING__ID、CUBE、ROLLUP
Hive窗口函数GROUPING SETS、GROUPING__ID、CUBE、ROLLUP入门
CoderJed
2018/09/13
1.4K0
Hive窗口函数05-GROUPING SETS、GROUPING__ID、CUBE、ROLLUP
Hive窗口函数
Hive官网,点我就进 oracle,sqlserver都提供了窗口函数,但是在mysql5.5和5.6都没有提供窗口函数!
孙晨c
2020/10/10
1.1K0
大数据快速入门(10):Hive窗口函数
首先,需要认识到,窗口函数并不是只有 hive 才有的,SQL 语法标准中,就有窗口函数。
kk大数据
2020/11/11
2.5K0
Hive高阶分析函数
示例:实现同一数据集的多重group by操作。事实上GROUPING SETS是多个GROUP BY进行UNION ALL操作的简单表达。
大数据学习与分享
2021/07/15
7250
Hsql函数下_sql nvl函数
1、使用标准的聚合函数COUNT、SUM、MIN、MAX、AVG 2、使用PARTITION BY语句,使用一个或者多个原始数据类型的列 3、使用PARTITION BY与ORDER BY语句,使用一个或者多个数据类型的分区或者排序列 4、使用窗口规范,窗口规范支持以下格式:
全栈程序员站长
2022/09/29
1.3K0
Hsql函数下_sql nvl函数
Hive补充之窗口函数
窗口函数 1、hive窗口函数语法 hive中的窗口函数over() ,over()窗口函数的语法结构
Maynor
2021/04/09
1.1K0
深入MySQL窗口函数:原理和应用
窗口函数(Window Functions)是SQL标准中的一个高级特性,它允许用户在不改变查询结果集行数的情况下,对每一行执行聚合计算或其他复杂的计算。这些计算是基于当前行与结果集中其他行之间的关系进行的。窗口函数特别适用于需要执行跨多行的计算,同时又想保持原始查询结果集的行数不变的场景。
公众号:码到三十五
2024/03/19
2.8K0
深入MySQL窗口函数:原理和应用
SQL干货 | 窗口函数的使用
Mysql从8.0版本开始,也和Sql Server、Oracle一样支持在查询中使用窗口函数,本文将根据官方文档,通过实例介绍窗口函数并举例分组排序函数的使用。
Python数据科学
2019/12/31
1.5K0
SQL干货 | 窗口函数的使用
相关推荐
Hive窗口函数02-NTILE、ROW_NUMBER、RANK、DENSE_RANK
更多 >
加入讨论
的问答专区 >
1技术总监架构部总经理擅长3个领域
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验