【Hive】hive窗口函数/分析函数 over子句

本文详细介绍了Hive中的over子句,包括其作用、开窗范围、window clause,以及row_number、rank和dense_rank等常用开窗函数的使用。通过案例解释了如何在Hive中利用over子句解决部门内排名问题。
摘要由CSDN通过智能技术生成

over子句介绍

over子句参考链接 https://blog.csdn.net/czr11616/article/details/101645693

1. 什么是over子句

我们可以形象的把over()子句理解成开窗子句,即打开一个窗口,窗口内包含多条记录,over()会给每一行开一个窗口。如下图,总共有5条记录,每一行代表一条记录,over()在每一条记录的基础上打开一个窗口,给r1记录打开w1窗口,窗口内只包含自己,给r2打开w2窗口,窗口内包含r1、r2,给r3打开w3窗口,窗口内包含r1、r2、r3,以此类推…
在这里插入图片描述
由上我们不难发现,在使用over()子句进行查询的时候, 不仅可以查询到每条记录的信息,还可以查询到这条记录对应窗口内的所有记录的聚合信息,所以我们通常结合聚合函数和over()子句一起使用。

那么over()是如何进行开窗的呢?即每条记录对应的窗口内应该包含哪些记录呢?这些都是在over()子句的括号内进行定义。

2. over子句的开窗范围

在这里插入图片描述

  • current row代表查询的当前行
  • 1 preceding代表前一行
  • 1 following代表后一行
  • unbounded preceding代表第一行
  • unbounded following代表最后一行。

(注意这里的第一行和最后一行并不是严格的第一行和最后一行,根据具体情况而定)

3. window clause

over()子句的开窗范围可以通过window 子句(window clause)在over()的括号中定义,window clause的规范如下:

(ROWS | RANGE) BETWEEN (UNBOUNDED | [num]) PRECEDING AND ([num] PRECEDING | CURRENT ROW | (UNBOUNDED | [num]) FOLLOWING)
(ROWS | RANGE) BETWEEN CURRENT ROW AND (CURRENT ROW | (UNBOUNDED | [num]) FOLLOWING)
(ROWS | RANGE) BETWEEN [num] FOLLOWING AND (UNBOUNDED | [num]) FOLLOWING

例如 :

select *,sum(column_name) over( rows between unbounded preceding and unbounded following) from table_name 

表示查询每一行的所有列值,同时给每一行打开一个从第一行到最后一行的窗口,并统计窗口内所有记录的column_name列值的和。最后给每一行输出该行的所有属性以及该行对应窗口内记录的聚合值。

4. over子句默认值

如果over()子句中什么都不写的话,默认开窗范围是:rows between unbounded preceding and unbounded following

4.1 order by

如果over()子句中接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值