在Oracle中使用rank()over()排名的问题
排序:
---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,就会放在最后,而不会影响排序结果).
在Oracle中使用rank()over()排名的问题的更多相关文章
- 在MySQL中实现Rank高级排名函数【转】
MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名.尽管如此,可不要小瞧基础而简单的查询语句,我们可以利用其来达到Rank函数一样的高级排名 ...
- MySQL之实现Oracle中的rank()函数的功能
假设表格为student, 数据如下: 我们要在MySQL中实现Oracle中的rank()函数功能,即组内排序,具体来说: 就是对student表中按照课程(course)对学生(name) ...
- 在MySQL中实现Rank高级排名函数
MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名.尽管如此,可不要小瞧基础而简单的查询语句,我们可以利用其来达到Rank函数一样的高级排名 ...
- Oracle函数over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名
(1) 函数: over()的作用及用法: -- 分区(分组)求和. RANK ( ) OVER ( [query_partition_clause] order_by_clause )D ...
- Oracle中rank() over, dense_rank(), row_number() 的区别
摘自:http://www.linuxidc.com/Linux/2015-04/116349.htm Oracle 中 rank() over, dense_rank(), row_number() ...
- Oracle 中的分析函数
Oracle常用分析函数介绍(排名函数+窗口函数) 2014年11月30日 ⁄ 数据库 ⁄ 共 3903字 ⁄ 暂无评论 ⁄ 阅读 7,772 次 评级函数 常见评级函数如下: RANK():返回数据 ...
- Oracle中的sql操作符 和分析函数
Oracle中的操作符算术操作符:无论是在sqlserver,或者是java中,每种语言它都有算术操作符,大同小异. Oracle中算术操作符(+)(-)(*)(/) 值得注意的是:/ 在oracle ...
- Oracle中的rownum用法解析
注意:rownum从1开始: 1.rownum按照记录插入时的顺序给记录排序,所以有order by的子句时一定要注意啊! 2.使用时rownum,order by字段是否为主键有什么影响? 3 ...
- oracle中sql语句的优化
oracle中sql语句的优化 一.执行顺序及优化细则 1.表名顺序优化 (1) 基础表放下面,当两表进行关联时数据量少的表的表名放右边表或视图: Student_info (30000条数据)D ...
随机推荐
- DB层面上的设计 分库分表 读写分离 集群化 负载均衡
第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的 互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的 ...
- ZOJ-2362 Beloved Sons 最大权值匹配
题意:国王有N个儿子,现在每个儿子结婚都能够获得一定的喜悦值,王子编号为1-N,有N个女孩的编号同样为1-N,每个王子心中都有心仪的女孩,现在问如果安排,能够使得题中给定的式子和最大. 分析:其实题目 ...
- E2 2014.07.01 更新日志
增加功能 完善功能 电话报修单,添加可以发短信通知客户和技术员选项 商品历程分析,增加按商品分类条件统计 修件库,增加可以按维修商条件过滤,以方便查询某维修商的返修件 维修中,备件转销售时,自动读 ...
- Eclipse使用Jetty(转)
eclipse 与 jetty 结合的最佳实践 http://www.cnblogs.com/mignet/archive/2011/12/04/eclipse_jetty_perfect_integ ...
- iOS - AutoLayout
前言 NS_CLASS_AVAILABLE_IOS(6_0) @interface NSLayoutConstraint : NSObject @available(iOS 6.0, *) publi ...
- iOS - UISlider
前言 NS_CLASS_AVAILABLE_IOS(2_0) __TVOS_PROHIBITED @interface UISlider : UIControl <NSCoding> @a ...
- poj1066Treasure Hunt(线段相交)
链接 很纠结的找到了所有线段的中点,又很纠结的找到了哪些中点可以直接相连,最后bfs一下求出了最短路.. #include <iostream> #include<cstdio> ...
- caffe里的blocking_queue.hpp与.cpp干了点什么呢???
我看的一下午才明白的,因为吧,我之前都是不知道与boost::thread相关的任何知识,然后开始看各种资料啊... 妈的,我就是一个小白,没一点基础的.. 总的来说:blocking_queue实现 ...
- linux内核的熵池
也可以看百度科 Linux内核采用熵来描述数据的随机性.熵(entropy)是描述系统混乱无序程度的物理量,一个系统的熵越大则说明该系统的有序性越差,即不确定性越大.在信息学中,熵被用来表征一个符号或 ...
- C++——对象和类
最重要的OOP特性: *抽象: *封装和数据隐藏: *多态: *继承: *代码的可重用性: 一.抽象和类 1.类型 指定基本类型完成了三项工作:1).决定数据对象需要的内存数量:2).决定如何解释内存 ...