hive:窗口函数(开窗函数)over

本文介绍了Hive中的窗口函数over的使用,包括其基本概念、使用步骤和相关函数。通过实例详细解释了如何利用over进行数据分区、排序、计算范围的确定,如查询销售数据中的顾客购买行为、计算排名等,展示了over在处理复杂数据聚合问题时的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.简介

我个人的理解,over()就是指定了计算时如何分区,并且限定了计算的范围

1.使用步骤:

1.通过over语句以外的代码确定计算所涉及的所有数据
2.通过over里面的partition将所有数据进行分区
3.通过order里面的order把每个partition里面的数据进行排序
4.通过current now、n preceding等语句确定每行记录所对应的计算范围
5.通过over前面的函数进行计算

2.相关函数及常用关键字:

  • partition by:后跟分区字段名,指定数据按照哪个变量来进行分区
  • order by:后跟排序字段名,指定区内数据按照哪个变量来进行排序
  • rows between…and… :指定每行记录对应的计算范围。current row当前行,n preceding往前n行,n following往后n行,unbounded preceding第一行,unbounded following最后一行。over括号内没有rows between时,默认计算范围为该行所在分区的全部;当over前面的函数支持rows between、over括号内没有rows between,但有order by时,计算范围为该行所在分区的第一行到该行。
  • LAG(col,n,default_val):表示向前追溯,括号内第一个参数表示对哪个变量进行追溯,第二个参数表示往前追溯几期,最后一个参数表示前面没有记录时用什么来代替。不支持rows between
  • LEAD(col,n, default_val):表示向后追溯,括号内第一个参数表示对哪个变量进行追溯,第二个参数表示往前追溯几期,最后一个参数表示后面没有记录时用什么来代替。不支持rows between
  • ntile(n):把指定区域的数据分成几片。不支持rows between

以下用具体实例来介绍over的具体使用方法:

二.实例介绍

1.销售数据

原始数据:
在这里插入图片描述

(1)查询在2017年4月份购买过的顾客和顾客人数(同一人多次购买只算一个)

思路:

  • step1:
    查找4月份有购买行为的人:
select distinct(name) from business
where substring(orderdate,1,7)='2017-04';
  • step2:
    计算4月份一共的购买记录数
select count(distinct name) indi_total
from business
where substring(orderdate,1,7)='2017-04';

在这里插入图片描述

  • step3:
    考虑如何将这两者结合起来:over函数
select distinct name,Count(distinct name) over() indi_total
from business
where substring(orderdate,1,7)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值