在Oracle中使用rank()over()排名的问题

news/2024/7/3 5:53:06

排序:

---rank()over(order by 列名 排序)的结果是不连续的,如果有4个人,其中有3个是并列第1名,那么最后的排序结果结果如:1 1 1 4 select scoreid, studentid,COURSENAME,totalexamscore , rank()over(order by TOTALEXAMSCORE desc)orderbyNum from SCORECOURSE a ,COURSESCORE b where a.SCORECOURSEID = b.SCORECOURSEID

---dense_rank()over(order by 列名 排序)的结果是连续的,如果有4个人,其中有3个是并列第1名, 那么最后的排序结果如:1 1 1 2 select scoreid, studentid,COURSENAME,totalexamscore , dense_rank()over(order by TOTALEXAMSCORE desc)orderbyNum from SCORECOURSE a ,COURSESCORE b where a.SCORECOURSEID = b.SCORECOURSEID

 

----rank () OVER (PARTITION BY 列名 ORDER BY 列名 排序)使用分区方式获取每门课程的最高分 SELECT *   FROM (SELECT scoreid, studentid, coursename, TOTALEXAMSCORE,                rank () OVER (PARTITION BY coursename ORDER BY TOTALEXAMSCORE DESC)orderbynum           FROM scorecourse a, coursescore b          WHERE a.scorecourseid = b.scorecourseid and studentID = 'xxxxx')  WHERE orderbynum < 2

 

-----使用over实现成绩求和 -----SUM (totalexamscore) OVER (ORDER BY studentid) sum1  实现的是连续求和,如第一个学生的总评成绩是30,则sum1就展示为30,到第二个学生成绩出现的时候,则会依次累加 -----SUM (totalexamscore) OVER () sum2 就相当于是单纯的求和,和直接使用sum是一致的 SELECT scoreid, studentid, totalexamscore,        SUM (totalexamscore) OVER (ORDER BY studentid) sum1,        SUM (totalexamscore) OVER () sum2   FROM coursescore 注:这个案例想了很久也没想到很直观的描述,还请大家亲自去测试一下吧!!
语法: rank() over (order by 排序字段 顺序) rank() over (partition by 分组字段 order by 排序字段 顺序)

 

1.顺序:asc|desc  名次与业务相关:   示例:求优秀学员,成绩:降序  迟到次数:升序 2.分区字段:根据什么字段进行分区。

 

问题:分区与分组有什么区别? •分区只是将原始数据进行名次排列(记录数不变), •分组是对原始数据进行聚合统计(记录数变少,每组返回一条)。

 

注意:使用rank()over(order by 排序字段 顺序)排序的时候,空值是最大的 (如果排序字段为null,可能造成在排序时将null字段排在最前面,影响排序的正确性。 所以建议将dense_rank()over(order by 列名 排序)改为dense_rank()over(order by 列名 排序 nulls last) 这样只要排序字段为null,就会放在最后,而不会影响排序结果).

转载于:https://www.cnblogs.com/len0031/p/4039972.html


http://www.niftyadmin.cn/n/1123767.html

相关文章

hadoop之mapreduce实例

例子很简单&#xff0c;我没有运行自带的wordcount&#xff0c;而是自己做了一个简单的例子。实现的功能是从我们的nginx的access log里面计算url访问的次数。access log文件&#xff1a;10.2.112.22 - - [11/Apr/2012:10:25:31 0800] "GET /bf5bd91c/css/base/base_jiexi…

fib函数用迭代替换递归

fib函数递归实现&#xff1a; long Fib(long n) {if (n < 1) {return n; }else {var t1 Fib(n - 1);var t2 Fib(n - 2);return t1 t2; } } fib函数改为迭代&#xff1a; class Class1 {class Node …

Java四种线程池

线程池的好处 1、线程的创建需要消耗的&#xff0c;用完了马上就扔了比较可惜&#xff0c;所以把它缓存起来&#xff0c;以后还能再用&#xff1b; 2、可以根据实际情况调整线程池的大小&#xff0c;防止线程太多&#xff1b; 3、有些场合可以用线程池来做同步&#xff08;比如…

HDU-2896 病毒侵袭(AC自动姬)

病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 28243 Accepted Submission(s): 6538 Problem Description当太阳的光辉逐渐被月亮遮蔽&#xff0c;世界失去了光明&#xff0c;大地迎来最黑暗的时刻。…

Aruba无线网络学习(二)

说明&#xff1a;工作过程中接触到了Aruba无线网络设备&#xff0c;并在其网站上下载了技术文档。文档是英文的&#xff0c;看起来有一点费劲。只好一边翻译&#xff0c;一边学习&#xff0c;一边记笔记。水平有限&#xff0c;难免有错误的地方&#xff0c;请大家帮助指正。七、…

四种ABAP数据对象(转)

在ABAP/4中可以使用四种数据对象 1、内部数据对象 创建内部数据对象供在特定的程序中使用&#xff0c;在该程序之外无效&#xff0c;包括文字、常量、变量 &#xff08;1&#xff09;文字 文字是固定值&#xff0c;分为文本文字和数字文字。文本文字是单引号内的字母数字字符序…

Linux速成教程

2019独角兽企业重金招聘Python工程师标准>>> Linux操作系统最为有名的是它对初学者不友好&#xff01;当用户开始接触Linux会感觉到迷惑不解&#xff1a;"Linux凭什么得到广泛应用&#xff0c;还如此声名显赫&#xff1f;" 1.终端和shell 2.常见的使用Lin…

截取与分析日志文件的特定行数的操作

在进行操作系统和数据库系统管理时经常会遇到在日志文件中查找某个字符或者按照时间截取某个时间段的日志进行分析。今天早上就遇到一个MySQL数据库上的问题mysql数据库在0-3点的时候数据库会话连接tpscpu和iowait等都比平时大了许多。为了定位这个时间段内到底发生了那些慢查询…