前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hive排序函数

Hive排序函数

作者头像
孙晨c
发布2020-10-10 16:30:17
1.1K0
发布2020-10-10 16:30:17
举报
文章被收录于专栏:无题~

@

目录

排名函数

注意:排名函数可以跟Over(),但是不能定义window_clause。在计算名次前,需要先排序!

  • RANK: 允许并列,一旦有并列跳号!
  • ROW_NUMBER: 行号! 连续的,每个号之间差1!
  • DENSE_RANK: 允许并列,一旦有并列不跳号!
  • CUME_DIST: 从排序后的第一行到当前值之间数据 占整个数据集的百分比!
  • PERCENT_RANK: rank-1/ 总数据量-1
  • NTILE(x): 将数据集均分到X个组中,返回每条记录所在的组号
代码语言:javascript
复制
select  *,rank() over(order by score) ranknum,
ROW_NUMBER() over(order by score) rnnum,
DENSE_RANK() over(order by score) drnum,
CUME_DIST() over(order by score) cdnum,
PERCENT_RANK() over(order by score) prnum
from score
在这里插入图片描述
在这里插入图片描述

练习

表及字段:score.name | score.subject | score.score

  1. 按照科目进行排名
代码语言:javascript
复制
select *,rank() over(partition by subject order by score desc)
from score
在这里插入图片描述
在这里插入图片描述

2. 给每个学生的总分进行排名

代码语言:javascript
复制
select name,sumscore,rank()  over( order by sumscore desc)
from
(select name,sum(score) sumscore
from  score
group by  name) tmp
在这里插入图片描述
在这里插入图片描述

3. 求每个学生的成绩明细及给每个学生的总分和总分排名

代码语言:javascript
复制
select *,DENSE_RANK() over(order by tmp.sumscore desc)
from
(select *,sum(score) over(partition by name)  sumscore
from score) tmp
在这里插入图片描述
在这里插入图片描述

4. 只查询每个科目的成绩的前2名

代码语言:javascript
复制
select *
from
(select *,rank() over(partition by subject order by score desc) rn
from score) tmp
where rn<=2
在这里插入图片描述
在这里插入图片描述

5. 查询学生成绩明细,并显示当前科目最高分

代码语言:javascript
复制
select *,max(score) over(partition by subject)
from score
# 或
select *,FIRST_VALUE(score) over(partition by subject order by score desc)
from score
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 排名函数
    • 练习
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档