当前位置:网站首页 > Haskell函数式编程 > 正文

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



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 取分组内排序后,截止到当前行,最后一个值;

到此这篇窗口函数 聚合函数(窗口函数聚合函数)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • icmpv6报文格式(icmpv6报文格式详解)2026-02-21 19:45:08
  • sigmoid函数求导图像(sigmoid函数求偏导)2026-02-21 19:45:08
  • 条件变量函数(条件变量的含义)2026-02-21 19:45:08
  • 支付方式pos是什么(支付方式pos是什么意思呀)2026-02-21 19:45:08
  • 服务器部署(服务器部署方式)2026-02-21 19:45:08
  • pdfview(PDFview格式怎么转成PDF)2026-02-21 19:45:08
  • 信用卡支付方式有哪些(信用卡支付方式有哪些种类)2026-02-21 19:45:08
  • 多级列表如何设置1-1(多级列表如何设置1.1、2.1.2.2这样的格式)2026-02-21 19:45:08
  • 指数与对数的转换公式图片(指数与对数的转换公式记忆口诀)2026-02-21 19:45:08
  • pem文件是什么意思(pem格式文件怎么打开)2026-02-21 19:45:08
  • 全屏图片