rank函数

Hive的Rank排名(rank函数,dense_rank函数,row_numer函数)

≡放荡痞女 提交于 2020-03-11 17:53:03
总结: RANK()排序相同的时候会重复,总数不会变。 DENSE_RANK()排序相同时会重复,总数量会减少。 ROW_NUMBER()会根据顺序计算。 这三个函数常常和开窗函数结合在一起使用。 案例操作: 1,计算没门科目的成绩排名: [isea@hadoop108 datas]$ cat score.txt 悟空 语文 87 悟空 数学 95 悟空 英语 68 八戒 语文 94 八戒 数学 56 八戒 英语 84 张飞 语文 64 张飞 数学 86 张飞 英语 84 小乔 语文 65 小乔 数学 85 小乔 英语 78 创建hive表,并导入数据: create table score(name string,subject string,score int) row format delimited fields terminated by '\t'; load data local inpath '/opt/module/datas/score.txt' into table score; > select * from score; +-------------+----------------+--------------+--+ | score.name | score.subject | score.score | +-------------+---------

MySQL中rank函数如何实现

馋奶兔 提交于 2020-01-01 06:38:36
MySQL中不存在类似于SQL Server或Orcal中的rank()函数来得到排名。而在实际的工作中,常常需要将查询后排序得到的排名给记录下来。由于项目需要,不仅要对成绩进行排名,而且需要相同成绩的具有相同的排名。根据网上的提供的排名方法,进一步进行扩充,得到了下面的实现方式。 表:score,有三个字段,id,name,score 表中原始数据: SQL代码: select tmp.id,tmp.name,tmp.score, -- 顺序一直在变大 @j:=@j+1 as j, -- 只有在前后二次排序值不同时才会使用顺序号 @k:=(case when @pre_score=tmp.score then @k else @j end) as rank, @pre_score:=tmp.score as pre_score from ( -- 成绩排序 select * from score order by score desc ) tmp, -- @k 表示最终的排名(相同值时序号相同) -- @j 表示顺序排名 -- @pre_score上一次排序值 (select @k :=0,@j:=0, @pre_score:=0) sdcore 排序后的结果: 来源: https://www.cnblogs.com/bjwylpx/p/5345162.html

MySQL语句实现排名

╄→гoц情女王★ 提交于 2019-12-06 02:52:28
首先我们创建一张city_popularity表: CREATE TABLE city_popularity( region int(10) NOT NULL COMMENT '1 国内 2 海外', city_name VARCHAR(64) NOT NULL, popularity DOUBLE(5,2) NOT NULL); 并向其中添加数据: INSERT INTO city_popularity (region, city_name, popularity) VALUES (1, '北京', 30.0), (1, '上海', 30.0), (1, '南京', 10.0), (2, '伦敦', 20.0), (1, '张家界', 8.0), (2, '纽约', 35.0), (1, '三亚', 25.0), (2, '新加坡', 35.0); 创建出的表及数据如下: 现在对所有城市的热门度进行排名: 1. 通过窗口函数 MySQL从8.0开始支持窗口函数,也叫分析函数,序号函数ROW_NUMBER(), RANK(), DENSE_RANK()满足不同需求的排序 SELECT region, city_name, popularity, ROW_NUMBER() OVER (PARTITION BY region ORDER BY popularity DESC) AS

SQL排名

无人久伴 提交于 2019-12-01 07:58:05
1.ROW_NUMBER() 定义:ROW_NUMBER()函数作用就是将select查询到的数据进行排序,每一条数据加一个序号,他不能用做于学生成绩的排名,一般多用于分页查询, 比如查询前10个 查询10-100个学生。 实例: 1.1对学生成绩排序 这里number就是每个学生的序号 根据studentScore(分数)进行desc倒序 1.2获取第二个同学的成绩信息 这里用到的思想就是 分页查询的思想 在原sql外再套一层select where t.number>=1 and t.number<=10 是不是就是获取前十个学生的成绩信息纳。 2.RANK() 定义:RANK()函数,顾名思义排名函数,可以对某一个字段进行排名,这里为什么和ROW_NUMBER()不一样那,ROW_NUMBER()是排序,当存在相同成绩的学生时,ROW_NUMBER()会依次进行排序,他们序号不相同,而Rank()则不一样出现相同的,他们的排名是一样的。下面看例子: 2.1对学生成绩进行排名 这里发现 ROW_NUMBER()和RANK()怎么一样?因为学生成绩都不一样所以排名和排序一样,下面改一下就会发现区别。 当出现两个学生成绩相同是里面出现变化。RANK()是 1 2 2,而ROW_NUMBER()则还是1 2 3,这就是RANK()和ROW_NUMBER()的区别了 3.DENSE

Rank

限于喜欢 提交于 2019-11-27 01:33:54
1,函数说明 RANK() 排序相同时会重复,总数不会变 DENSE_RANK() 排序相同时会重复,总数会减少 ROW_NUMBER() 会根据顺序计算 2, 数据准备 name subject score 孙悟空 语文 87 孙悟空 数学 95 孙悟空 英语 68 大海 语文 94 大海 数学 56 大海 英语 84 宋宋 语文 64 宋宋 数学 86 宋宋 英语 84 婷婷 语文 65 婷婷 数学 85 婷婷 英语 78 3,需求 计算每门学科成绩排名 4,创建本地movie.txt,导入数据 vi score.txt 5, 创建hive表并导入数据 create table score( name string, subject string, score int) row format delimited fields terminated by "\t"; load data local inpath '/opt/module/datas/score.txt' into table score; 6,按需求查询数据 select name, subject, score, rank() over(partition by subject order by score desc) rp, dense_rank() over(partition by subject