学习 Hive(十):窗口函数

窗口函数语法:

Function() OVER ([PARTITION BY <...>] [ORDER BY <...>] [Window Specification])  

PARTITION BY 定义窗口分区,控制哪些数据行和当前数据行在同一个分区。

ORDER BY 定义窗口排序,控制分区内的排序方式,决定了当前行在分内的位置。

Window Specification 定义窗口帧,根据当前行的位置声明哪些行将包含在帧中。更多

表、数据集、分区、帧和行的关系如下图所示:

Window Functions

窗口函数可以分为三类:

  • 聚合函数,通常的聚合函数,如 SUM 和 MAX 等。
  • 排序函数,排序数据函数,如 RANK 和 ROW_NUMBER 等。
  • 分析函数,统计和对比函数,如 LEADLAG 和 FIRST_VALUE 等。

样例数据:

namedepartmentsalary
TomA5500
JerryA5000
LilyB7000
LucyA8000
TonyB3800
MichealB4000

聚合函数

需求:计算每个雇员所在部门的总工资额。

查询 SQL:

SELECT  
  name,
  department,
  salary,
  SUM(salary) OVER (PARTITION BY department) AS sum
FROM employee  

查询结果:

namedepartmentsalarysum
TomA550018500
JerryA500018500
LilyB700014800
LucyA800018500
TonyB380014800
MichealB400014800

排序函数

需求:计算每个雇员所在部门的工资排名。

查询 SQL:

SELECT  
  name,
  department,
  salary,
  RANK() OVER (PARTITION BY department SORT BY salary DESC) AS rank
FROM employee  

查询结果:

namedepartmentsalaryrank
TomA55002
JerryA50003
LilyB70001
LucyA80001
TonyB38003
MichealB40002

分析函数

需求:计算每个雇员所在部门的最高工资。

查询 SQL:

SELECT  
  name,
  department,
  salary,
  FIRST_VALUE(salary) OVER (PARTITION BY department SORT BY salary DESC) AS first
FROM employee  

查询结果:

namedepartmentsalaryrank
TomA55008000
JerryA50008000
LilyB70007000
LucyA80008000
TonyB38007000
MichealB40007000

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值