2025年窗口函数 聚合函数(窗口函数聚合函数)

窗口函数 聚合函数(窗口函数聚合函数)1 窗口函数概述 窗口函数 Window functions 是一种 SQL 函数 非常适合于数据分析 因此也叫做 OLAP 函数 其最大特点是 输入值是从 SELECT 语句的结果集中的一行或多行的 窗口 中获取的 你也可以理解为窗口有大有小 行有多有少 通过 OVER 子句 窗口函数与其他 SQL 函数有所区别 如果函数具有 OVER 子句 则它是窗口函数 如果它缺少 OVER 子句

大家好,我是讯享网,很高兴认识大家。



1.窗口函数概述

窗口函数(Window functions)是一种SQL函数,非常适合于数据分析,因此也叫做OLAP函数,其最大特点是:输入值是从SELECT语句的结果集中的一行或多行的“窗口”中获取的。你也可以理解为窗口有大有小(行有多有少)。

通过OVER子句,窗口函数与其他SQL函数有所区别。如果函数具有OVER子句,则它是窗口函数。如果它缺少OVER子句,则它是一个普通的聚合函数

窗口函数可以简单地解释为类似于聚合函数的计算函数,但是通过GROUP BY子句组合的常规聚合会隐藏正在聚合的各个行,最终输出一行,窗口函数聚合后还可以访问当中的各个行,并且可以将这些行中的某些属性添加到结果集中

为了更加直观感受窗口函数,我们通过sum聚合函数进行普通常规聚合和窗口聚合,一看效果。

2.窗口函数语法

3.案例:网站用户页面浏览次数分析

在网站访问中,经常使用cookie来标识不同的用户身份,通过cookie可以追踪不同用户的页面访问情况,有下面两份数据:

字段含义:cookieid 、访问时间、pv数(页面浏览数)

字段含义:cookieid、访问时间、访问页面url

在Hive中创建两张表表,把数据加载进去用于窗口分析。

3.1.窗口聚合函数

从Hive v2.2.0开始,支持DISTINCT与窗口函数中的聚合函数一起使用。

这里以sum()函数为例,其他聚合函数使用类似。

3.2.窗口表达式

我们知道,在sum(…) over( partition by… order by … )语法完整的情况下,进行的累积聚合操作,默认累积聚合行为是:从第一行聚合到当前行

Window expression窗口表达式给我们提供了一种控制行范围的能力,比如向前2行,向后3行。

语法如下:


讯享网

3.3.窗口排序函数

窗口排序函数用于给每个分组内的数据打上排序的标号。注意窗口排序函数不支持窗口表达式。总共有4个函数需要掌握:

row_number:在每个分组中,为每行分配一个从1开始的唯一序列号,递增,不考虑重复;

rank: 在每个分组中,为每行分配一个从1开始的序列号,考虑重复,挤占后续位置;

dense_rank: 在每个分组中,为每行分配一个从1开始的序列号,考虑重复,不挤占后续位置;

上述这三个函数用于分组TopN的场景非常适合。

还有一个函数,叫做ntile函数,其功能为:将每个分组内的数据分为指定的若干个桶里(分为若干个部分),并且为每一个桶分配一个桶编号

如果不能平均分配,则优先分配较小编号的桶,并且各个桶中能放的行数最多相差1。

有时会有这样的需求:如果数据排序后分为三部分,业务人员只关心其中的一部分,如何将这中间的三分之一数据拿出来呢?NTILE函数即可以满足。

3.4.窗口分析函数

LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值

第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL);

LEAD(col,n,DEFAULT)用于统计窗口内往下第n行值

第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL);

FIRST_VALUE 取分组内排序后,截止到当前行,第一个值;

LAST_VALUE 取分组内排序后,截止到当前行,最后一个值;

小讯
上一篇 2025-05-15 20:46
下一篇 2025-04-20 13:31

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/178835.html