目标:
1、掌握 sum()、avg()等用于累计计算的聚合函数,学会对行数的限制(移动计算);
2、掌握 row_number(),rank()、dense_rank()用于排序的函数;
3、掌握 ntile()用于分组查询的函数;
4、掌握 lag()、lead()偏移分析函数
窗口函数(window function):
与聚合函数类似,但是窗口函数是每一行数据都生成一个结果,聚合函数可以将多行数据按照规定聚合为一行,一般来说聚合后的行数要少于聚合前的行数,但是有时我们想要既显示聚合前的数据,又要显示聚合后的数据,这时便引入了窗口函数, 窗口函数是在 select 时执行的,位于 order by 之前 。
在日常工作中,经常遇到 计算截止某月或某天的累计数值 ,在Excel可以通过函数来实现,
在HiveSQL里,可以利用窗口函数实现。
1)2018年每月的支付总额和当年累计支付总额
2)对2017年和2018年公司的支付总额按月度累计进行分析,按年度进行汇总
说明:1、over中的 partition by 起到分组的作用;
2、order by 按照什么顺序进行累加,升序ASC、降序DESC,默认升序
3、正确的分组是非常重要的,partition by 后面的字段是需要累计计算的区域,需要仔细理解
(计算三日留存、七日留存、三十日留存等方式可以使用这个函数。)
3)对2018年每个月的近三个月进行移动的求平均支付金额
用法:这三个函数的作用都是返回相应规则的排序序号,由于排序函数不是二次聚合计算,因此不一定要使用子查询
4)2019年1月,用户购买商品品类数量的排名
5)选出2019年支付金额排名在第10、20、30名的用户
6)将2019年1月的支付用户,按照支付金额分成5组
7)选出2019年退款金额排名前10%的用户
说明:Lag和Lead分析函数可以在同一次查询中取出同一字段的 前N行数据(Lag)和后N行的数据(Lead) 作为独立的列。
在实际应用当中,若要用到取今天和昨天的某字段差值时,Lag和Lead函数的应用就显得尤为重要。
当然,这种操作可以用表的 自连接实现 ,但是Lag和Lead与 left join、 right join等自连接相比,效率更高,SQL语句更简洁。
8)支付时间间隔超过100天的用户数(这一次购买距离下一次购买的时间?,注意datediff函数是日期大的在前面)
9)每个城市,不同性别,2018年支付金额最高的TOP3用户
步骤总结:
1、首先筛选出每个用户和每个用户总的消费金额;
2、对两个表进行连接提取需要的字段;
3、对连接后的表进行二次聚合计算,计算出不同城市、性别的金额排名;
4、对二次聚合计算的表进行条件筛选提取
10)每个手机品牌退款金额前25%的用户
步骤总结:
1、首先筛选出每个用户和每个用户的总退款金额;
2、对两个表进行连接提取需要的字段;
3、对连接后的表进行按手机品牌内分组;
4、对分组后的表进行条件筛选提取
HiveSQL核心技能之窗口计算
在日常工作中,经常遇到 计算截止某月或某天的累计数值 ,在Excel可以通过函数来实现, 在HiveSQL里,可以利用窗口函数实现。1)2018年每月的支付总额和当年累计支付总额 2)对2017年和2018年公司的支付总额按月度累计进行分析,按年度进行汇总 说明:1、over中的 partition by 起到分组的作用; 2...
数据分析课程笔记 - 20 - HIVE 核心技能之窗口函数
需求分析 :先限定时间范围,然后根据 user_name 进行分组,接着选出 分组去重后的 user_name,并计算每个用户 goods_category 的数量(记得 distinct 去重),再然后就是用窗口函数对 goods_category 的数量进行排序,当然选择哪一种排序方法要看具体要求,这里我们可以三种方法都试一下看看结果: 注意 :窗口函数中的 order...
Hive QL窗口函数总结(2)
窗口函数是Hive SQL中的关键特性,它允许我们在数据分组的基础上进行分析,而不是简单地对整个数据集进行汇总。窗口函数通过`over()`子句定义窗口,包括分组(partition by)、排序(order by)和窗口范围(rows)三个元素。例如,`sum`函数在窗口内计算值,而非整个分组,以便于获取每个组的累加值。窗口规范...
【Hive】SQL | 窗口函数详解
本文通过实例讲解Hive SQL面试中常见的窗口函数应用。假设有一个贷款表(loan),包含贷款人ID、贷款日期与金额。使用窗口函数over()可以对聚合函数如sum()、min()、max()与avg()进行分区计算。例如,第一句查询计算每个贷款人当前记录前三条贷款的总金额;第二句计算至下一笔贷款前,贷款人累计的贷款...
文章hive sql—开窗函数—累积求和和滑动求和
数据集包含姓名、月份和数量三个字段。通过使用SQL中的窗口函数,我们能够实现数据的分组计算,包括累积求和和滑动求和。累积求和是一个简单的窗口函数应用,通过将sum()函数与over()函数结合,能够计算同一姓名下,每个月份的累计数量。结果展示的是,对于每一个姓名,后一个月的总数量是前几个月份数量的...
hivesql及窗口函数
解释:HiveSQL是Apache Hive中的SQL语言,用于处理存储在Hadoop分布式文件系统上的大规模数据集。HiveSQL提供了丰富的功能,包括数据查询、数据转换和数据分析等。窗口函数是HiveSQL中的一个重要特性,它们允许在数据集的特定窗口或子集上执行计算。窗口函数通常用于执行一些复杂的计算,如排名、累计总和、移动...
Hive sql及窗口函数
在数据处理中,Hive SQL还支持创建分区表、外部表,以及使用分桶抽样查询进行抽样分析。窗口函数在Spark SQL中与Hive SQL相似,主要应用于TopN分析、分组排序和统计计算,与Flink窗口函数在应用场景上有所区别。总的来说,Hive SQL的强大功能涵盖了数据清洗、转换、聚合和排序,是数据处理和分析的重要工具。
Hive窗口函数
窗口函数在Hive中充当关键角色,其执行安排在SQL处理最后,但优先于order by子句。其作用域由over子句定义,处理一组返回多个值。窗口函数的类型多样,旨在满足不同的统计计算需求。首先,我们关注统计计算窗口函数。这些函数以SQL聚合功能为基础,实现累计计算,如sum(...over(...)),即对一组数据进行...
2万字长文,最全面的Hive开窗函数讲解和实战指南(必看)
本文全面介绍了Hive中的窗口函数,这是一种SQL标准特性,用于对数据集中的每行进行独立计算,尤其在报表分析中发挥着重要作用。窗口函数不同于常规函数和聚合函数,它基于一个"窗口"(窗口定义由PARTITION BY和ORDER BY确定)对数据进行操作,返回单个值。窗口函数主要包括:聚合函数(如sum, max, min, ...
Hive分析窗口函数(一) SUM,AVG,MIN,MAX(3)
需牢记窗口函数在SQL处理中作为最终步骤执行,仅位于Order by之前。Partition by定义行的分组或分区,聚集行计算值,并在新组出现时重置。此操作使得每个成员返回特定值,而非表中该值的所有实例。partition by的优点在于同一select语句中,一个窗口函数计算独立于按其他列分区的其他窗口函数计算。