当前位置: 首页 > news >正文

【hive】hive中row_number() rank() dense_rank()的用法

hive中row_number() rank() dense_rank()的用法

一、函数说明

主要是配合over()窗口函数来使用的,通过over(partition by order by )来反映统计值的记录。

  1. rank() over()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)
  2. dense_rank() over()是连续排序,有两个第二名时仍然跟着第三名。相比之下  row_number是没有重复值的
  3. row_number() 会根据顺序计算,仅仅是加了序号

二、应用场景

可以用于学生成绩排名

row_number()按照值排序时产生一个自增编号,不会重复(如:1、2、3、4、5、6)

rank() 按照值排序时产生一个自增编号,值相等时会重复,会产生空位(如:1、2、3、3、3、6)dense_rank() 按照值排序时产生一个自增编号,值相等时会重复,不会产生空位(如:1、2、3、3、3、4)


下面开始学习这几个函数:

  1. 准备数据:

字段名为:name、orderdate、cost

Jack,2017-01-01,10
Tony,2017-01-02,15
Jack,2017-02-03,23
Tony,2017-01-04,29
Jack,2017-01-05,46
Jack,2017-04-06,42
Tony,2017-01-07,50
Jack,2017-01-08,55
Mark,2017-04-08,62
Mart,2017-04-09,68
Meil,2017-05-10,12
Mart,2017-04-11,75
Meil,2017-06-12,80
Mart,2017-04-13,94
  1. 创建表:
create table business(
name string,
orderdate string,
cost int)
row format delimited
fields terminated by ",";
  1. 加载数据:
load data local inpath "/root/business.txt" into table business;

1、row_number() over()排序功能:

在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where group by order by 的执行。

partition by 用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,而聚合函数一般只有一个反映统计值的记录。

例子:按月份来查询,根据cost来降序排序:

select *,row_number() over(partition by substr(orderdate,1,7) order by cost desc) as num
from business;

img

2、rank() over()

rank() over()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)

为了演示效果,我们再把txt文件导入hive中,相当于hive表中有2份相同的数据

导入数据:

load data local inpath "/root/business.txt" into table business;

例子:按名字分组,并按照金额进行排序,给出编号

select *,rank() over(partition by name order by cost desc) as num from business;

img

3、dense_rank() over()

dense_rank() over()是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的

还是上面那个例子:按名字分组,按金额降序排序,给出序号

select *,dense_rank() over(partition by name order by cost desc) as num from business;

img

http://www.lryc.cn/news/131347.html

相关文章:

  • 【云原生】【k8s】Kubernetes+EFK构建日志分析安装部署
  • 计算实数数组中所有元素的绝对值 numpy.fabs()
  • 深入浅出Pytorch函数——torch.nn.init.orthogonal_
  • ORACLE中UNION、UNION ALL、MINUS、INTERSECT学习
  • 【k8s、云原生】基于metrics-server弹性伸缩
  • 回归预测 | MATLAB实现WOA-SVM鲸鱼算法优化支持向量机多输入单输出回归预测(多指标,多图)
  • VSCode快捷键
  • 贪心算法求数组中能组成三角形的最大周长
  • VMWare Workstation 17 Pro 网络设置 桥接模式 网络地址转换(NAT)模式 仅主机模式
  • 拒绝摆烂!C语言练习打卡第四天
  • KubeSphere 社区双周报 | Java functions framework 支持 SkyWalking | 2023.8.4-8.17
  • 【学习笔记之java】使用RestTemplate调用第三方接口
  • 数据集成革新:去中心化微服务集群的无限潜能
  • 后端返回可下载的xlsx文件,但是前端接收下载后为乱码
  • 提升资源管理效率必备工具推荐
  • HJ23 删除字符串中出现次数最少的字符
  • 文心一言 VS 讯飞星火 VS chatgpt (76)-- 算法导论7.3 1题
  • Leetcode - 滑动窗口
  • 如何保证数据传输的安全?
  • 政务、商务数据资源有效共享:让数据上“链”,记录每一个存储过程!
  • xml转map工具类
  • C++并发多线程--std::future_status、std::shared_future和std::atomic的使用
  • Redis在Java中的基本使用
  • 4.2 C++ Boost 内存池管理库
  • Django模型基础
  • 导读-Linux简介
  • 判断平面中两射线是否相交的高效方法
  • 基于VUE3+Layui从头搭建通用后台管理系统(前端篇)八:自定义组件封装上
  • RabbitMq交换机类型介绍
  • 中国电信秋招攻略,考试内容分析