Oracle排名函数(Rank)实例详解 | 您所在的位置:网站首页 › RANK函数排名 › Oracle排名函数(Rank)实例详解 |
这篇文章主要介绍了Oracle排名函数(Rank)实例详解,需要的朋友可以参考下
--已知:两种排名方式(分区和不分区):使用和不使用partition --两种计算方式(连续,不连续),对应函数:dense_rank,rank ·查询原始数据:学号,姓名,科目名,成绩 select * from t_score S_ID S_NAME SUB_NAME SCORE 1 张三 语文 80.00 2 李四 数学 80.00 1 张三 数学 0.00 2 李四 语文 50.00 3 张三丰 语文 10.00 3 张三丰 数学 3 张三丰 体育 120.00 4 杨过 JAVA 90.00 5 mike c++ 80.00 3 张三丰 Oracle 0.00 4 杨过 Oracle 77.00 2 李四 Oracle 77.00 ·查询各学生科目为Oracle排名(简单排名) select sc.s_id,sc.s_name,sub_name,sc.score, rank() over ( order by score desc) 名次 from t_score sc where sub_name='Oracle' S_ID S_NAME SUB_NAME SCORE 名次 4 杨过 Oracle 77.00 1 2 李四 Oracle 77.00 1 3 张三丰 Oracle 0.00 3 对比:rank()与dense_rank():非连续排名与连续排名(都是简单排名) select sc.s_id,sc.s_name,sub_name,sc.score, dense_rank() over ( order by score desc) 名次 from t_score sc where sub_name='Oracle' S_ID S_NAME SUB_NAME SCORE 名次 4 杨过 Oracle 77.00 1 2 李四 Oracle 77.00 1 3 张三丰 Oracle 0.00 2 ·查询各学生各科排名(分区排名) select sc.s_id,sc.s_name,sub_name,sc.score, rank() over ( partition by sub_name order by score desc) 名次 from t_score sc S_ID S_NAME SUB_NAME SCORE 名次 4 杨过 JAVA 90.00 1 4 杨过 Oracle 77.00 1 2 李四 Oracle 77.00 1 3 张三丰 Oracle 0.00 3 5 mike c++ 80.00 1 3 张三丰 数学 1 2 李四 数学 80.00 2 1 张三 数学 0.00 3 3 张三丰 体育 120.00 1 1 张三 语文 80.00 1 2 李四 语文 50.00 2 3 张三丰 语文 10.00 3
·查询各科前2名(分区排名) ·类似:新闻表,求栏目点击率在前3位的新闻。商品表,求各类别销售额在前10位的商品。 select * from ( select sc.s_id,sc.s_name,sub_name,sc.score, dense_rank() over (partition by sub_name order by score desc) 名次 from t_score sc ) x where x.名次 |
CopyRight 2018-2019 实验室设备网 版权所有 |