Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Hive窗口函数

Hive窗口函数

作者头像
孙晨c
发布于 2020-10-10 09:26:01
发布于 2020-10-10 09:26:01
1.1K00
代码可运行
举报
文章被收录于专栏:无题~无题~
运行总次数:0
代码可运行

@

目录

官方文档地址

Hive官网,点我就进 oracle,sqlserver都提供了窗口函数,但是在mysql5.5和5.6都没有提供窗口函数!

窗口函数: 窗口+函数

  • 窗口: 函数运行时计算的数据集的范围
  • 函数: 运行的函数! 仅仅支持以下函数:

Windowing functions

  • LEAD (scalar_expression [,offset] [,default]): 返回当前行以下N行的指定列的列值!如果找不到,就采用默认值
  • LAG (scalar_expression [,offset] [,default]): 返回当前行以上N行的指定列的列值!如果找不到,就采用默认值
  • FIRST_VALUE(列名,[false(默认)]):返回当前窗口指定列的第一个值,第二个参数如果为true,代表加入第一个值为null,跳过空值,继续寻找!
  • LAST_VALUE(列名,[false(默认)]):返回当前窗口指定列的最后一个值,第二个参数如果为true,代表加入第一个值为null,跳过空值,继续寻找!

统计类的函数(一般都需要结合over使用):min,max,avg,sum,count

排名分析:

  • RANK
  • ROW_NUMBER
  • DENSE_RANK
  • CUME_DIST
  • PERCENT_RANK
  • NTILE

注意:不是所有的函数在运行都是可以通过改变窗口的大小,来控制计算的数据集的范围!所有的排名函数和LAG,LEAD,支持使用over(),但是在over()中不能定义 window_clause

格式: 函数 over( partition by 字段 ,order by 字段 window_clause )

窗口的大小可以通过windows_clause来指定:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(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

特殊情况:

  • ①在over()中既没有出现windows_clause,也没有出现order by,窗口默认为rows between UNBOUNDED PRECEDING and UNBOUNDED FOLLOWING
  • ②在over()中(没有出现windows_clause),指定了order by,窗口默认为rows between UNBOUNDED PRECEDING and CURRENT ROW

窗口函数和分组有什么区别?

  • ①如果是分组操作,select后只能写分组后的字段
  • ②如果是窗口函数,窗口函数是在指定的窗口内,对每条记录都执行一次函数
  • ③如果是分组操作,有去重效果,而partition不去重!

练习

(9) 查询前20%时间的订单信息 精确算法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 select *
 from
 (select name,orderdate,cost,cume_dist() over(order by orderdate ) cdnum
 from  business) tmp
 where cdnum<=0.2

不精确计算:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 select *
 from
 (select name,orderdate,cost,ntile(5) over(order by orderdate ) cdnum
 from  business) tmp
 where cdnum=1

(8)查询顾客的购买明细及顾客最近三次cost花费

最近三次: 当前和之前两次当前+前一次+后一次

当前和之前两次:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,orderdate,cost,sum(cost) over(partition by name order by orderdate rows between 2 PRECEDING and CURRENT  row) 
 from business 

当前+前一次+后一次:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,orderdate,cost,sum(cost) over(partition by name order by orderdate rows between 1 PRECEDING and 1  FOLLOWING) 
 from business

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,orderdate,cost,cost+
 lag(cost,1,0) over(partition by name order by orderdate )+
 lead(cost,1,0) over(partition by name order by orderdate )
 from business

(7) 查询顾客的购买明细及顾客本月最后一次购买的时间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,orderdate,cost,LAST_VALUE(orderdate,true) over(partition by name,substring(orderdate,1,7) order by orderdate rows between CURRENT  row and UNBOUNDED  FOLLOWING) 
 from business 

(6) 查询顾客的购买明细及顾客本月第一次购买的时间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,orderdate,cost,FIRST_VALUE(orderdate,true) over(partition by name,substring(orderdate,1,7) order by orderdate ) 
 from business

(5) 查询顾客的购买明细及顾客下次的购买时间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 select name,orderdate,cost,lead(orderdate,1,'无数据') over(partition by name order by orderdate ) 
 from business

(4)查询顾客的购买明细及顾客上次的购买时间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  select name,orderdate,cost,lag(orderdate,1,'无数据') over(partition by name order by orderdate ) 
 from business

(3)查询顾客的购买明细要将cost按照日期进行累加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,orderdate,cost,sum(cost) over(partition by name order by orderdate ) 
 from business

(2)查询顾客的购买明细及月购买总额

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 select name,orderdate,cost,sum(cost) over(partition by name,substring(orderdate,1,7) ) 
 from business

(1)查询在2017年4月份购买过的顾客及总人数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,count(*) over(rows between UNBOUNDED  PRECEDING and UNBOUNDED  FOLLOWING)
from business
where substring(orderdate,1,7)='2017-04'
group by name

等价于

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,count(*) over()
from business
where substring(orderdate,1,7)='2017-04'
group by name
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Hive补充之窗口函数
窗口函数 1、hive窗口函数语法 hive中的窗口函数over() ,over()窗口函数的语法结构
Maynor
2021/04/09
1.1K0
大数据快速入门(10):Hive窗口函数
首先,需要认识到,窗口函数并不是只有 hive 才有的,SQL 语法标准中,就有窗口函数。
kk大数据
2020/11/11
2.6K0
Hive 窗口函数最全讲解和实战
在深入研究Over字句之前,一定要注意:在SQL处理中,窗口函数都是最后一步执行,而且仅位于Order by子句之前 可以想象成sql的输出结果,就是窗口函数输入的结果。
kk大数据
2019/12/18
2.1K0
窗口函数大揭秘!轻松计算数据累计占比,玩转数据分析的绝佳利器
2. PostgreSQL(>=11) 3. SQL Server(>=2012) 4. Oracle(>=8i) 5. SQLite(>=3.28.0)
葡萄城控件
2023/10/16
3880
窗口函数大揭秘!轻松计算数据累计占比,玩转数据分析的绝佳利器
Hive SQL 大厂必考常用窗口函数及相关面试题
二、窗口函数的基本用法 1.基本语法 2.设置窗口的方法 1)window_name 2)partition by 子句 3) order by子句 4)rows 指定窗口大小 3.开窗函数中加order by 和 不加 order by的区别
王知无-import_bigdata
2022/11/11
3.9K0
Hive SQL 大厂必考常用窗口函数及相关面试题
MySQL8新特性窗口函数详解
本文博主给大家详细讲解一波 MySQL8 的新特性:「窗口函数」,相信大伙看完一定能有所收获。
wayn
2023/06/14
4860
MySQL8新特性窗口函数详解
被问到窗口函数不知所措?一文教会你数据分析师常用的窗口函数!
在数据分析中,窗口函数是我们经常用到的函数,今天的文章我们总结了常用的各类窗口函数并给出实例。
数据万花筒
2020/12/30
1.5K0
被问到窗口函数不知所措?一文教会你数据分析师常用的窗口函数!
Hive窗口函数/分析函数详解
在sql中有一类函数叫做聚合函数,例如sum()、avg()、max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的。但是有时我们想要既显示聚集前的数据,又要显示聚集后的数据,这时我们便引入了窗口函数。窗口函数又叫OLAP函数/分析函数,窗口函数兼具分组和排序功能。
五分钟学大数据
2021/03/04
9050
Hive窗口函数/分析函数详解
Hive 高频考点讲解
Hive 是 FaceBook 开源的一款基于 Hadoop 数据仓库工具,它可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。
sowhat1412
2022/09/20
1.2K0
Hive 高频考点讲解
快速学习-Hive查询
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select 查询语句语法:
cwl_java
2020/02/21
1.9K0
快速学习-Hive查询
MySQL 窗口函数详解:分析性查询的强大工具
MySQL 窗口函数提供了一种灵活的方式来处理 SQL 查询中的数据,它们允许你在不需要对数据进行分组的情况下对行集进行分析。窗口函数最常用于分析性操作,比如计算排名、累计和、移动平均值等。MySQL 从版本 8.0 开始支持窗口函数。以下是窗口函数的几个关键概念和常见用法:
科技新语
2024/12/17
1730
MySQL 窗口函数详解:分析性查询的强大工具
数据库:SQL 窗口函数知识介绍
窗口函数(Window Function) 是 SQL2003 标准中定义的一项新特性,并在 SQL2011、SQL2016 中又加以完善,添加了若干处拓展。窗口函数不同于我们熟悉的普通函数和聚合函数,它为每行数据进行一次计算:输入多行(一个窗口)、返回一个值。在报表等分析型查询中,窗口函数能优雅地表达某些需求,发挥不可替代的作用。
小明互联网技术分享社区
2021/05/14
7610
数据库:SQL 窗口函数知识介绍
大数据技术之_08_Hive学习_03_查询+函数
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select 查询语句语法:
黑泽君
2019/03/11
1.9K0
大数据技术之_08_Hive学习_03_查询+函数
Hive常用窗口函数实战
本文介绍了Hive常见的序列函数,排名函数和窗口函数。结合业务场景展示了Hive分析函数的使用
Eights
2020/07/13
2.8K0
SparkSql窗口函数源码分析(第一部分)
WindowExpression :描述该expression是一个windowExpression,继承BinaryLike,是一个二元树。
数据仓库践行者
2022/11/25
1.2K0
SparkSql窗口函数源码分析(第一部分)
hive窗口函数/分析函数详细剖析
在sql中有一类函数叫做聚合函数,例如sum()、avg()、max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的。但是有时我们想要既显示聚集前的数据,又要显示聚集后的数据,这时我们便引入了窗口函数。窗口函数又叫OLAP函数/分析函数,窗口函数兼具分组和排序功能。
五分钟学大数据
2021/01/21
9840
hive窗口函数/分析函数详细剖析
Hive函数
**CONCAT_WS(separator, str1, str2,...):**多字符串拼接
ha_lydms
2023/11/19
5051
Hive函数
SQL 窗口函数的优化和执行
窗口函数(Window Function)是 SQL2003 标准中定义的一项新特性,并在 SQL2011、SQL2016 中又加以完善,添加了若干处拓展。窗口函数不同于我们熟悉的普通函数和聚合函数,它为每行数据进行一次计算:输入多行(一个窗口)、返回一个值。在报表等分析型查询中,窗口函数能优雅地表达某些需求,发挥不可替代的作用。
SQL数据库开发
2024/04/24
2430
SQL 窗口函数的优化和执行
mysql中分组排序_oracle先分组后排序
​ 窗口函数(window functions),也被称为 “开窗函数”,也叫OLAP函数(Online Anallytical Processing,联机分析处理),可对数据库数据进行实时分析处理。它是数据库的标准功能之一,主流的数据库比如Oracle,PostgreSQL都支持窗口函数功能,MySQL 直到 8.0 版本才开始支持窗口函数。
全栈程序员站长
2022/11/10
8.1K0
MySQL窗口函数,你最熟悉的陌生人~
  这三个点虽然平时用得少,但在面试中却常被问到。值得一提的是,很多面试官对问题竟然也是一知半解。。
陈哈哈
2021/12/31
1.1K0
MySQL窗口函数,你最熟悉的陌生人~
相关推荐
Hive补充之窗口函数
更多 >
LV.0
这个人很懒,什么都没有留下~
作者相关精选
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验