资源描述:
《oracle排名函数(rank)实例详解(学习自用备份)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、--已知:两种排名方式(分区和不分区):使用和不使用partition--两种计算方式(连续,不连续),对应函数:dense_rank,rank·查询原始数据:学号,姓名,科目名,成绩select*fromt_scoreS_IDS_NAMESUB_NAMESCORE1张三语文80.002李四数学80.001张三数学0.002李四语文50.003张三丰语文10.003张三丰数学 3张三丰体育120.004杨过JAVA90.005mikec++80.003张三丰Oracle0.004杨过Oracle77.002李四Oracle77.00·查询各学生科目为Oracle排
2、名(简单排名)selectsc.s_id,sc.s_name,sub_name,sc.score,rank()over(orderbyscoredesc)名次fromt_scorescwheresub_name='Oracle'S_IDS_NAMESUB_NAMESCORE名次4杨过Oracle77.0012李四Oracle77.0013张三丰Oracle0.003对比:rank()与dense_rank():非连续排名与连续排名(都是简单排名)selectsc.s_id,sc.s_name,sub_name,sc.score,dense_rank()over(o
3、rderbyscoredesc)名次fromt_scorescwheresub_name='Oracle'S_IDS_NAMESUB_NAMESCORE名次4杨过Oracle77.0012李四Oracle77.0013张三丰Oracle0.002·查询各学生各科排名(分区排名)selectsc.s_id,sc.s_name,sub_name,sc.score,rank()over(partitionbysub_nameorderbyscoredesc)名次fromt_scorescS_IDS_NAMESUB_NAMESCORE名次4杨过JAVA90.0014杨过O
4、racle77.0012李四Oracle77.0013张三丰Oracle0.0035mikec++80.0013张三丰数学 12李四数学80.0021张三数学0.0033张三丰体育120.0011张三语文80.0012李四语文50.0023张三丰语文10.003·查询各科前2名(分区排名)·类似:新闻表,求栏目点击率在前3位的新闻。商品表,求各类别销售额在前10位的商品。select*from(selectsc.s_id,sc.s_name,sub_name,sc.score,dense_rank()over(partitionbysub_nameorderbys
5、coredesc)名次fromt_scoresc)xwherex.名次<=2S_IDS_NAMESUB_NAMESCORE名次4杨过JAVA90.0014杨过Oracle77.0012李四Oracle77.0013张三丰Oracle0.0025mikec++80.0013张三丰数学 12李四数学80.0023张三丰体育120.0011张三语文80.0012李四语文50.002·查询各同学总分selects_id,s_name,sum(score)sum_scorefromt_scoregroupbys_id,s_nameS_IDS_NAMESUM_SCORE1张三
6、80.002李四207.003张三丰130.004杨过167.005mike80.00·根据总分查询各同学名次selectx.*,rank()over(orderbysum_scoredesc)名次from(selects_id,s_name,sum(score)sum_scorefromt_scoregroupbys_id,s_name)xS_IDS_NAMESUM_SCORE名次2李四207.0014杨过167.0023张三丰130.0031张三80.0045mike80.004语法:rank()over(orderby排序字段顺序)rank()over(pa
7、rtitionby分组字段orderby排序字段顺序)1.顺序:asc
8、desc名次与业务相关:示例:找求优秀学员:成绩:降序迟到次数:升序2.分区字段:根据什么字段进行分区。问题:分区与分组有什么区别?·分区只是将原始数据进行名次排列(记录数不变),·分组是对原始数据进行聚合统计(记录数变少,每组返回一条),注意:聚合。脚本:createtableT_SCORE(AUTOIDNUMBERprimarykey,S_IDNUMBER(3),S_NAMECHAR(8)notnull,SUB_NAMEVARCHAR2(20),SCORENUMBER(10,2));ins
9、ertin