前言

在hive的学习中接触到了三种很实用的排名函数,这些函数在Mysql8.0版本中也已存在,
分别是:Rank(),Dense_rank(),Row_number(),
虽然都是排名函数,但三者间的些许差异很容易让人搞混,在这篇文章中,我将基于hive结合一个学生成绩排名的例子来对这三种排名函数进行解释与辨析。

一、学生成绩表准备

进行学生表的创建以及样例数据的导入

create table stu(sno varchar(5),score int) row format delimited fields terminated by ',';load data local inpath '/opt/module/data/stu_score.txt' into table stu;

查看学生表:

从数据中可以看出,s01,s03,s06号学生的成绩相同,本文要介绍的这三种排名函数的主要差异就是在对相同成绩的排名时采用不同的处理办法,以至于得到不同的结果。

接下来就是根据具体例子对三种函数进行讲解。

二、Rank()函数

Rank()函数可以根据指定的字段来排序,排序时如果遇到排名字段值相同的情况时,会将相同的归为一组,也就是值相同,排名就是相同的,后面的排名会顺延,总排名数是不会改变的。

举一个例子:Rank()函数排序可以理解为:每个人先根据成绩高低从左到右坐好座位,座位上先根据人数标好连续的序号,成绩相同的人座位的序号都改为成绩相同的第一个人的座位序号,后面的人座位的的序号还是原来排好的,不会改变。

使用Rank()函数根据score字段对stu表进行降序排序的sql语句:

select sno,score,rank() over (order by score desc) from stu;

如下图所示,s01,s03,s06号学生成绩都是90分,使用Rank()排名时,他们三个人都是第二名,最后一名s05因为排名顺延,最终排名是第六,即总排名数是不会改变的,总共有六个人,总排名数就是六。

三、Dense_rank()函数

Dense_rank()函数可以根据指定的字段来排序,排序时如果遇到排名字段值相同的情况时,会将相同的归为一组,后面的接着前面的排序序号。

Dense_rank()函数与Rank()函数的不同点在于:即使存在相同字段值的话,排名也不是跳跃的,Dense_rank()函数进行的排名是连续的。也就是相比于Rank()函数,Dense_rank()函数的总排名数会减少。

举一个例子:Dense_rank()函数排序可以理解为:每个人先根据成绩高低从左到右坐好座位,座位上根据人数标好连续的序号,成绩相同的人座位的序号都改为成绩相同的第一个人的座位序号,后面的人座位的的序号接着前面的人的序号而改变,不保持原来的序号。

使用Dense_rank()函数根据score字段对stu表进行降序排序的sql语句:

select sno,score,dense_rank() over (order by score desc) from stu;

如下图所示,s01,s03,s06号学生成绩都是90分,使用Dense_rank()排名时,他们三个人都是第二名,s04成为第三名,最后一名s05排名最终排名是第四,即总排名数因为有成绩相同的学生而减少。

四、Row_number()函数

Row_number()函数可以根据指定的字段来排序,Row_number()函数比较直接,排好名后,排名序号就是从上到下连续的,比较容易理解。

再举一个例子:Row_number()函数排序可以理解为:每个人先根据成绩高低从左到右坐好座位,座位上根据人数标好连续的序号,就可以了。

使用Row_number()函数根据score字段对stu表进行降序排序的sql语句:

select sno,score,row_number() over (order by score desc) from stu;

如下图所示,s01,s03,s06号学生成绩都是90分,使用Row_number()排名时,他们三个人分别是第二第三第四名,没有出现相同排名的情况,最后总排名数与人数相同。

五、总结

不论是在学习工作中还是面试中,hive中排名函数的使用都是一个十分重要的点,应该牢牢掌握。
后续会总结出排名函数有关的题目与解答,供大家参考。

基于hive的SQL排名函数详解相关推荐

  1. Hive SQL开窗函数详解

    Hive 开窗函数 group by 是分组函数,一组出来一个数据 over() 开窗,针对每一条数据,都有一个独立的组 mk 3 jk 3 mk 3 select orderdate,cost,su ...

  2. SQL——coalesce函数详解

    知乎主页:知乎主页https://www.zhihu.com/people/shuang-shou-cha-dai-53https://www.zhihu.com/people/shuang-shou ...

  3. MaxCompute SQL函数详解 ODPS SQL函数详解---之日期相关函数

    MaxCompute SQL函数详解 ODPS SQL函数详解 日期函数 to_date函数 返回类型:datetime 语法:to_date(类型 参数1,类型 参数2);to_date(strin ...

  4. 匿名函数python_基于python内置函数与匿名函数详解

    内置函数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() d ...

  5. java里的进制转换函数_基于Java中进制的转换函数详解

    十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...

  6. mysql coalesce函数用法,SQL Server COALESCE函数详解及实例

    SQL Server COALESCE函数详解 很多人知道ISNULL函数,但是很少人知道Coalesce函数,人们会无意中使用到Coalesce函数,并且发现它比ISNULL更加强大,其实到目前为止 ...

  7. MaxCompute SQL函数详解 ODPS SQL函数详解---之常用数学运算相关函数

    MaxCompute SQL函数详解 ODPS SQL函数详解---之常用数学运算相关函数 MaxCompute/ODPS SQL常用数学运算相关函数 ABS函数-计算绝对值 sql:select A ...

  8. python输入参数改变图形_Python基于Tensor FLow的图像处理操作详解

    本文实例讲述了Python基于Tensor FLow的图像处理操作.分享给大家供大家参考,具体如下: 在对图像进行深度学习时,有时可能图片的数量不足,或者希望网络进行更多的学习,这时可以对现有的图片数 ...

  9. Softmax函数详解与推导

    原文:https://www.cnblogs.com/zongfa/p/8971213.html Softmax函数详解与推导 一.softmax函数 softmax用于多分类过程中,它将多个神经元的 ...

最新文章

  1. 机器学习中对抗性攻击的介绍和示例
  2. MYSQL中LIMIT用法_后台分页
  3. 函数声明末尾的“ const”是什么意思? [重复]
  4. 针对深度学习(神经网络)的AI框架调研
  5. 把Qt的界面文件(.ui文件)生成源文件(.h或.cpp)封装成链接库
  6. WAMPServer自定义网站根目录
  7. 编码整洁之道:专业程序员的行为准则(英文版)
  8. win10兼容模式怎么设置_win10护眼模式关不掉怎么办
  9. vue计算属性computed与监听属性watch的基本使用
  10. mysql 错误等级_Mysql5.7 的错误日志中最常见的note级别日志解释
  11. PSTN和互联网——无线接入与定位(1)
  12. 2017-2018-1 20155301 实验四 外设驱动程序设计
  13. EFK+sentinl报警机制
  14. js上传excel文件
  15. 完美解决IE9浏览器出现的对象未定义问题
  16. python--控制窗体
  17. 技嘉1080显卡体质测试软件,技嘉AORUS GTX 1080 Gaming Box
  18. 【总结】DeepCTR如何构建模型
  19. ASEMI线性稳压电源芯片AMS1117-3.3参数及接线电路图
  20. IOS客户端面试总结

热门文章

  1. PHP入门7-1函数
  2. swagger nodes内容如何换行
  3. 淘宝天猫成交记录评论采集方法分享
  4. 图形学笔记(十三)光线追踪3——双向反射分布函数BRDF(反射方程、递归方程)、辐射度量学基础radiometry、立体角、Radiant Energy、Flux、Irrdiance、Radiance
  5. c语言中isseek用法,seek的用法总结大全
  6. js控制html下拉框select的选择,js实现select下拉框选择
  7. 全球及中国厕纸分配器行业销售趋势及营销渠道策略报告(新版)2022-2027
  8. 什么标准规定了aes加密_aes 128标准加密使用哪些字符
  9. 挣脱浏览器的束缚(2) - 别让脚本引入坏了事
  10. webrtc直播框架