Hive的窗口函数

定义:
聚合函数是针对定义的行集()执行聚集,每组只返回一个值.sum()avg()max()
窗口函数也是针对定义的行集()执行聚集,可为每组返回多个值.如既要显示聚集前的数据,又要显示聚集后的数据.步骤:
1.将记录分割成多个分区.
2.在各个分区上调用窗口函数.  语法:
--先执行over后面的部分,再执行over前面的部分.  
function() over (PARTITION BY(col1,col2...) ORDER BY(col3,col4...))
--函数       over  根据某条件分组,形成一个小组   再组内进行排序 
--现有一张表wt1,字段有id、name、age,数据如下
--数据
1   a1  10
2   a2  10
3   a3  10
4   a4  20
5   a5  20
6   a6  20
7   a7  20
8   a8  30

统计函数

不分区只排序

-- 窗口范围是整个表
-- 按照age排序,每阶段的age数据进行统计求和.
select id,name,age,count() over (order by age) as n from wt1;  

在这里插入图片描述

相同字段分区、排序

-- 窗口范围是表下按照age进行分区
-- 在分区里面,再按照age进行排序
select id,name,age,count() over (partition by age order by age) as n from wt1;  
-- 若分区和排序是同一字段时,可以省略order by语句.

在这里插入图片描述

不同字段分区、排序

-- 窗口范围是表下按照age进行分区
-- 在分区里面,再按照id进行排序
select id,name,age,count() over (partition by age order by id) as n from wt1;  
-- 可以根据需要对order by进行asc,desc

在这里插入图片描述

序列函数

rank

会对相同数值,输出相同的序号,而且下一个序号间断,  如:1、1、3、3、5. rank(等级)  

dense_rank

会对相同数值,输出相同的序号,而且下一个序号不间断,如:1、1、2、2、3. dense(稠密的)

row_number

会对所有数值,输出不同的序号,序号唯一且连续,如:1、2、3、4、5.
select id,name,age,sex,
rank() over(partition by sex order by age desc) as rk,
dense_rank() over(partition by sex  order by age desc) as drk,
row_number() over(partition by sex order by age desc) as rn
from stu;

在这里插入图片描述

行选择函数

-- 语法
over (rows between num 函数 and 函数)-- 关键词释义
:'
following
在后N行; following--(时间上)接着的,下述的,下列的.
preceding
在前N行; preceding--在…之前发生(或出现),先于,走在…前面.
unbounded
不限行数; unbounded--无穷的,无尽的,无限的.  
current row
当前行; current--现时发生的,当前的,现在的,通用的,流通的,流行的.
'-- 窗口中的整个范围
rows between unbounded preceding and unbouned following
-- 从窗口的前无限行到当前行
rows between unbounded preceding and current row
-- 从窗口的当前行的前2行到当前行
rows between 2 preceding and current row
-- 从窗口的当前行到当前行的后2行
rows between current row and 2 following
-- 现有一张表sale、有y、m、rmb三个字段,数据如下
-- 数据
年份  月份  销售额
2017    01  1000
2017    02  1000
2017    03  3000
2017    04  3000
2017    05  5000
2017    06  5000
2017    07  1000
2017    08  1000
2017    09  3000
2017    10  3000
2017    11  5000
2017    12  5000
2018    01  1000
2018    02  2000
2018    03  3000
2018    04  4000
2018    05  5000
2018    06  6000
-- 查询当月销售额和近三个月的销售额
select y,m,rmb,
sum(rmb) over(order by y,m rows between 2 preceding and current row) as s
from sale;
-- 从结果可以看出,窗口函数的结果是包括本行在内的前三月的总和.

在这里插入图片描述

-- 查询当月销售额和今年年初到当月的销售额
SELECT y,m,rmb,
sum(rmb) over(partition by y order by m rows between unbounded preceding and current row) as s
from sale;

在这里插入图片描述

值选择函数

-- 上面知道了行选择函数的写法是:
sum() over(partition by xx order by xx rows between xx and xx)
-- 相类似的,值选择函数的写法就是:
sum() over(partition by xx order by xx range between xx and xx)rows是物理窗口,是哪一行就是哪一行,与当前行的值(order by keykey的值)无关,只与排序后的行号相关,就是我们常规理解的那样。
• range是逻辑窗口,与当前行的值有关(order by keykey的值),key上操作range范围。

切片函数

-- ntile(n),用于将数据按照排序规则切分成n片,返回当前切片的序号,ntile不支持 rows between.
select y,m,rmb,ntile(2) over (partition by y order by m desc) as n from sale;

在这里插入图片描述

-- 如果切片不均匀,默认增加第一个切片的分布.  
select y,m,rmb,ntile(5) over (order by y,m) as n from sale;

在这里插入图片描述

lag、lead分析函数

-- lag和lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)作为独立的列。
-- 这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率,其中over()表示当前查询的结果集对象,括号里面的语句则表示对这个结果集进行处理.-- 函数介绍
LAG
LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值
参数1为列名,参数2为往上第n行(可选,默认为1),参数3为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)LEAD
与LAG相反
LEAD(col,n,DEFAULT) 用于统计窗口内往下第n行值
参数1为列名,参数2为往下第n行(可选,默认为1),参数3为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL).
select y,m,rmb,
lag(rmb,1) over(partition by y order by m) as lag_rmb,
lead(rmb,1) over(partition by y order by m) as lead_rmb
from sale;

first_value()、last_value()取值函数

-- first_value() 的结果容易理解,直接在结果的所有行记录中输出同一个满足条件的首个记录;-- last_value() 默认统计范围: rows between unbounded preceding and current row,也就是取当前行数据与当前行之前的数据的比较,如果需要在结果的所有行记录中输出同一个满足条件的最后一个记录,在order by 条件的后面加上语句:rows between unbounded preceding and unbounded following。
select y,m,rmb,
first_value(rmb) over(partition by y order by rmb desc) as rmb_first,
last_value(rmb) over(partition by y order by rmb desc rows between unbounded preceding and unbounded following) as rmb_last
from sale;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/13723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

word-表格疑难杂症诊治

一、用表格进行排版图片、制作公文头 可以在插入图片时固定列宽 二、表格中的疑难杂症 问题一:表格超过页面,右侧文字看不见 解决:表格窗口-布局-自动调整-根据窗口自动调整表格 问题二:表格底部文字被遮挡 解决:布…

【linux】yumvim工具理解使用

目录 Linux 软件包管理器 yum 关于 rzsz 注意事项 查看软件包 Linux开发工具 Linux编辑器-vim使用 vim的基本概念 vim的基本操作 vim正常模式命令集 vim末行模式命令集 简单vim配置 配置文件的位置 sudo提权 Linux 软件包管理器 yum 1.yum是什么&#xff1…

攻防世界---web---warmup

1、题目描述 2、查看源码,发现有个source.php 3、访问该文件,得到这一串代码 4、分析代码 5、访问hint.php,提示flag在ffffllllaaaagggg这个文件下 6、构造payload ?filesource.php?/../../../../../../ffffllllaaaagggg

Fitting Parameterized Three-Dimensional Models to Images

摘要 基于模型的识别和运动跟踪依赖于解决投影和模型参数,使其最佳适应匹配的2D图像特征的3D模型的能力。本文将当前的参数求解方法扩展到处理具有任意曲面和任意数量的内部参数(表示关节、可变尺寸或表面变形)的对象。开发了数值稳定化方法…

懒人网址导航页 search.html SQL注入漏洞复现

0x01 产品简介 懒人网址导航系统是一种智能化的网址导航平台,旨在帮助用户快速找到所需的网址和资源。该系统提供了智能化的网址搜索和推荐功能,能够根据用户的搜索习惯和偏好推荐相关的网址和资源。同时,系统还提供了网址分类、网址收藏和网址分享等功能,方便用户管理和共…

简易Docker磁盘使用面板Doku

这个项目似乎有 1 年多没更新了,最后发布版本的问题也没人修复,所以看看就行,不建议安装 什么是 Doku ? Doku 是一个简单、轻量级的基于 Web 的应用程序,允许您以用户友好的方式监控 Docker 磁盘使用情况。Doku 显示 D…

南京沁恒微USB HUB CH334/CH335多种封装规格选择,外围简单,价格还美丽

概述: CH334 和 CH335 是符合 USB2.0 协议规范的 全速,下行端口支持 USB2.0 高速 480Mbps 个 TT 分时调度 4 个下行端口),还支持高性能的 工业级设计,外围精简,可应用于计算机和工控机主板 特点&#xff1…

精品UI响应式视频教程知识付费系统源码在线教育网络课程在线点播可二开分销分站功能

这是一款知识付费平台模板,后台可上传本地视频,批量上传视频连接, 视频后台可设计权限观看,免费试看时间时长,会员等级观看,付费观看等功能, 也带软件app权限下载,帮助知识教育和软件…

域名邮箱是什么?怎么注册公司的域名邮箱?

拥有一个专业、独特的邮箱地址不仅能提升企业形象,还能增强客户信任感。域名邮箱是什么?域名邮箱也称为企业邮箱或定制邮箱,是一种基于企业自主域名设置的电子邮件服务。本文将详细介绍域名邮箱的概念、优势以及如何注册公司的域名邮箱 一、…

事务的ACID是什么及扁平化事务、链式事务

一、什么是事务 1.事务(Transaction)是区别于数据库文件系统的重要特性之一。事务会把数据库从一种一致状态转换为另一种一致状态。在数据库提交工作时,可以确保要么所有修改都已经保存,要么所有修改都不保存。 2.InnoDB存储引擎中的事物完…

详解HTML

目录 1.HTML 结构 1.1认识HTML标签 1.2标签层次结构 1.3快速生成代码框架 2.HTML常见标签 2.1注释标签 2.2标题标签:h1-h6 2.3段落标签:p 2.4换行标签:br 2.5格式化标签 2.6图片标签:img 2.7超链接标签 2.8表格标签…

全域运营是本地生活的下半场?新的创业风口来了?

随着全域概念的兴起,全域运营赛道也逐渐进入人们的视野之中,甚至有业内人士预测,全域运营将会是本地生活下半场的大趋势。 之所以这么说,是因为全域运营作为包含了公域和私域内所有运营业务的新模式,不仅能同时做所有本…

设计模式-解释器模式

作者持续关注 WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 定义 解释器模式(Interpreter Pattern&…

Nginx企业级负载均衡:技术详解系列(9)—— Nginx核心配置详解(全局配置)

你好,我是赵兴晨,97年文科程序员。‍‍‍‍‍ 在 Nginx企业级负载均衡:技术详解系列(8)—— Nginx核心配置详解(默认配置文件)文章中,咱们讨论了Nginx核心配置文件的基础知识&#…

STM32控制HC-SR04超声模块获取距离

欢迎入群共同学习交流 时间记录:2024/5/23 一、模块介绍 (1)引脚介绍 VCC:电源引脚,接单片机3.3/5V GND:电源地 Trig:超声信号触发引脚 Echo:超声信号接收引脚 (2&…

给你一把接口响应断言神器,你要不要?

JSON Schema是用来标记和校验JSON数据,类似于XMLSchema,可用在自动化测试验证JSON数据。 官网:http://json-schema.org/ 最常用版本:draft 04。(目前各类编程语言对draft 04支持最广泛) 举个例子 假如你有一个接口…

202473读书笔记|《但愿呼我的名为旅人:松尾芭蕉俳句300》——围炉夜话,身顿心安,愿每个人都能在爱里自由驰骋

202473读书笔记|《但愿呼我的名为旅人:松尾芭蕉俳句300》——围炉夜话,身顿心安,愿每个人都能在爱里自由驰骋 😍😍🤩🤩 译者序正文二正文三正文四正文五正文六正文七 《但愿呼我的名为旅人&…

智能进化:让AI大模型变得更聪明的路径探索

前言 随着人工智能(AI)技术的飞速发展,大模型在多个领域展现出了前所未有的能力。然而,它们仍然面临着理解力、泛化能力和适应性等方面的挑战。如何让大模型变得更聪明,是当前AI研究和应用的一个重要课题。本文将探讨…

解除网页禁止选择

控制台输入以下命令 复制:javascript:void(document.body.οncοpy) 可选:javascript:void(document.body.onselectstart) 拖拉:javascript:void(document.body.οnmοuseup)

C++实现基于http协议的epoll非阻塞模型的web服务器框架(支持访问服务器目录下文件的解析)

使用方法: 编译 例子:./httpserver 9999 ../ htmltest/ 可执行文件 端口 要访问的目录下的 例子:http://192.168.88.130:9999/luffy.html 前提概要 http协议 :应用层协议,用于网络通信,封装要传输的数据&…