发布网友 发布时间:2022-04-23 01:29
共13个回答
懂视网 时间:2022-05-03 06:09
--已知:两种排名方式(分区和不分区):使用和不使用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.名次<=2
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 | 2 |
5 | mike | c++ | 80.00 | 1 |
3 | 张三丰 | 数学 | 1 | |
2 | 李四 | 数学 | 80.00 | 2 |
3 | 张三丰 | 体育 | 120.00 | 1 |
1 | 张三 | 语文 | 80.00 | 1 |
2 | 李四 | 语文 | 50.00 | 2 |
·查询各同学总分 select s_id,s_name,sum(score) sum_score from t_score group by s_id,s_name
S_ID | S_NAME | SUM_SCORE |
1 | 张三 | 80.00 |
2 | 李四 | 207.00 |
3 | 张三丰 | 130.00 |
4 | 杨过 | 167.00 |
5 | mike | 80.00 |
·根据总分查询各同学名次 select x.*, rank() over (order by sum_score desc) 名次 from ( select s_id,s_name,sum(score) sum_score from t_score group by s_id,s_name ) x
S_ID | S_NAME | SUM_SCORE | 名次 |
2 | 李四 | 207.00 | 1 |
4 | 杨过 | 167.00 | 2 |
3 | 张三丰 | 130.00 | 3 |
1 | 张三 | 80.00 | 4 |
5 | mike | 80.00 | 4 |
语法: rank() over (order by 排序字段 顺序) rank() over (partition by 分组字段 order by 排序字段 顺序) 1.顺序:asc|desc 名次与业务相关: 示例:找求优秀学员:成绩:降序 迟到次数:升序 2.分区字段:根据什么字段进行分区。 问题:分区与分组有什么区别? ·分区只是将原始数据进行名次排列(记录数不变), ·分组是对原始数据进行聚合统计(记录数变少,每组返回一条),注意:聚合。
脚本:
create table t_score( autoid number primary key, s_id number(3), s_name char(8) not null, sub_name varchar2(20), score number(10,2) ); insert into t_score (autoid, s_id, s_name, sub_name, score) values (8, 1, ‘张三‘, ‘语文‘, 80); insert into t_score (autoid, s_id, s_name, sub_name, score) values (9, 2, ‘李四‘, ‘数学‘, 80); insert into t_score (autoid, s_id, s_name, sub_name, score) values (10, 1, ‘张三‘, ‘数学‘, 0); insert into t_score (autoid, s_id, s_name, sub_name, score) values (11, 2, ‘李四‘, ‘语文‘, 50); insert into t_score (autoid, s_id, s_name, sub_name, score) values (12, 3, ‘张三丰‘, ‘语文‘, 10); insert into t_score (autoid, s_id, s_name, sub_name, score) values (13, 3, ‘张三丰‘, ‘数学‘, null); insert into t_score (autoid, s_id, s_name, sub_name, score) values (14, 3, ‘张三丰‘, ‘体育‘, 120); insert into t_score (autoid, s_id, s_name, sub_name, score) values (15, 4, ‘杨过‘, ‘java‘, 90); insert into t_score (autoid, s_id, s_name, sub_name, score) values (16, 5, ‘mike‘, ‘c++‘, 80); insert into t_score (autoid, s_id, s_name, sub_name, score) values (3, 3, ‘张三丰‘, ‘oracle‘, 0); insert into t_score (autoid, s_id, s_name, sub_name, score) values (4, 4, ‘杨过‘, ‘oracle‘, 77); insert into t_score (autoid, s_id, s_name, sub_name, score) values (17, 2, ‘李四‘, ‘oracle‘, 77); commit;
ending...
转载:https://www.jb51.net/article/51627.htm
Oracle排名函数(Rank)实例详解
标签:number 排列 desc add 排名 方式 core lsp int
热心网友 时间:2022-05-03 03:17
要利用什么函数,首先找出对应的函数名称。按字母顺序查找以R开头的,点击确定。在菜单栏中单击插入命令的函数,指定的函数也就是说你要对哪一个数进行排名,这里选择的是H2中单元格的总成绩。
函数名后面的参数中,number为需要求排名的那个数值或者单元格名称(单元格内必须为数字),ref 为排名的参照数值区域,order的为0和1,默认不用输入,得到的就是从大到小的排名,若是想求倒数第几,order的值请使用1。这里共讲到三个参数,需要注意的第三个参数是可以省略的。
除了选择插入函数还可以直接在单元格里面输入函数也可以得到同样的效果。在B2单元格里面先输入等于号,一般等于号输入了之后就代表这个单元格里面的是一个公式。
RANK是一个从oracle 8.1.6开始引入的统计函数。RANK的功能是按照某种分组方式计算出返回结果的排行。RANK函数有两个,一个是RANK,另外一个是DENSE_RANK。RANK排序在碰到并列值的时候,下一个排行序号会跳过并列的值,而DENSE_RANK排序的结果有并列排名,下一个排行顺序仅仅加一。
热心网友 时间:2022-05-03 04:35
Excel表格中有一个名为“RANK”的函数,这个函数可以帮助用户对数据的数值大小进行排名(且会自动筛选重名),所显示的结果是有多少项目就显示多少项目,RANK函数的应用方法请看下文。
平常生活中,我们想将一列数字排序,大家最易想到的是用排序按钮,然后下一列用自动填充功能填充,但是当遇到两个数据相同的时候,这样填充出来的数据就不能很好的显示排名情况。两个105相同的分数,但是自动填充显示的名次却不一样。我们还得对这些相同分数的排名进行手动修改。
如何让Excel帮助我们,不用排序快捷键,而且能去除重名次呢。首先我们不用将数据排序,回到最初数据形式。下面我们需要运用RANK函数。在B2单元格中输入以下内容:
01=RANK(A2,$2:$24),其中A2是需要确定位次的数据,$A$2:$A$24表示数据范围,括号里的内容即表示A2单元格数据在A2:A24这个数据区域的排名情况,公式计算结果将被显示在B2单元格里。
然后选中B2单元格,将鼠标放在右下角,鼠标变成小十字的时候,按下鼠标左键不放,往下拉到B24单元格,这样所有分数的排名就显示出来了。
热心网友 时间:2022-05-03 06:09
rank函数排名有:单列排名,多列数值排名。
1、单列排名——降序排序比如,对学生成绩进行排名,肯定是最高分第一名,最低分最后一名,即它排名实际就是成绩的降序排序。
2、单列排名——升序排序比如,对参加跑步比赛的选手进行排名,肯定是跑步用时最少的第一名,用时最多的最后一名,所以,它的排名就是跑步比赛用时的升序排序。
3、多列数值一同排名如果要排名的数值不是都在同一列,而是分多列。
补充说明:
RANK函数主要是用来作用是排名。
公式为:RANK(number,ref,order)=RANK(A1,$A$1:$A$5,1)
解释为:RANK(你需要用排名的数字,在哪些数字列表里面排,要用什么排位方式排),所谓的排位方式就是,是最大排在第一,还是最小排在第一;如果你希望最大排在第一,那排位方式就空着或者写0,如果你希望最小排在第一,那排位方式就写1。
热心网友 时间:2022-05-03 08:01
rank函数为美式排名函数,美式排名的时候,如果有相同的值出现对应的名次都会显示为一个值。然后下一个名次会直接跳过中间存在的数。rank函数可以对不连续单元格进行排名:不连续的单元格,第二个参数需要用括号和逗号形式连接起来。如输入公式=RANK(B5,(B5,B9,B13,B17),0)。
RANK(要判断的单元格,查找的区域,1为最小数排第一,0为最大数排第一)。Number为需要找到排位的数字。Ref为数字列表数组或对数字列表的引用。Ref中的非数值型参数将被忽略(引用区域要绝对引用)。Order为一数字,指明排位的方式。如果order为0(零)或省略,MicrosoftExcel对数字的。
RANK函数公式写法:=RANK(要排名的数字,一组数字,降序or升序)公式说明:返回某数字在一列数字中相对于其他数值的大小排名。第3个参数若为0或忽略表示降序,非零值表示升序。
中式排名与美式排名的区别在于出现重复值的时候,下一个名次中式排名会按照正常排序,美式排名则会根据相同值个数跳过对应的名次。通过sumproct函数多条件操作的特点,可以将多个条件值进行合并,实现数据的单独分组排名。
热心网友 时间:2022-05-03 10:09
rank函数排名有:单列排名,多列数值排名。这个函数可以帮助用户对数据的数值大小进行排名,rank函数为美式排名函数,按字母顺序查找以R开头的,点击确定。热心网友 时间:2022-05-03 12:33
rank函数最常用的是求某一个数值在某一区域内的排名。即返回一个数字在数字列表中的排位。数字的排位是其大小与列表中其他值的比值,如果列表已排过序,则数字的排位就是它当前的位置。热心网友 时间:2022-05-03 15:15
rank函数排名有:单列排名,多列数值排名。热心网友 时间:2022-05-03 18:13
rank函数排名有:单列排名,多列数值排名。MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名。尽管如此,可不要小瞧基础而简单的查询语句,我们可以利用其来达到Rank函数一样的高级排名效果。热心网友 时间:2022-05-03 21:27
Excel表格中有一个名为“RANK”的函数,这个函数可以帮助用户对数据的数值大小进行排名(且会自动筛选重名),所显示的结果是有多少项目就显示多少项目。热心网友 时间:2022-05-04 00:59
RANK函数是这样定义的:返回一个数字在数字列表中的排位。数字的排位是其大小与列表中其它值的比值。函数RANK对重复数的排位相同,但重复数的存在将影响后续数值的排位。热心网友 时间:2022-05-04 04:47
rank函数返回一个数字在数字列表中的排位。用法:RANK(A1,B2:B10,1)。表示A1格内容在区域B2:B10内的位置大小,最后一个参数表示升序排位,如果省略或为0表示降序排位。热心网友 时间:2022-05-04 08:51
要完成如题的操作,Rank函数参数中对数组或数字列表的引用须是绝对引用,如图,输入”$C$2:$C$11“对C2:C11单元格区域进行绝对引用。