问题描述
分别使用row_number、rank和dense_rank的对成绩进行排名
1、row_number是行号,不会重复。
2、rank数据相同的,给出并列排名,但是会跳跃
3、dense_rank类似于rank,但不会跳跃。
分析问题
直接使用row_number、rank和dense_rank排名即可
准备数据
-- 删除表
drop table if exists students;
-- 创建表
CREATE TABLE students(
name string COMMENT '姓名',
score double comment '成绩'
);
-- 插入数据
insert overwrite table students values
('小王',100),
('小李',90),
('小张',90),
('小红',80);
select * from students;
实现代码
select name
,score
,row_number() over(order by score desc ) row_num
,rank() over(order by score desc ) rank_num
,dense_rank() over(order by score desc) dense_rank_num
from students
order by score desc