此篇文章是为了学会rank() over()所写。
官方文档

(DENSE_)RANK( ) OVER ([ query_partition_clause ] order_by_clause)
rank():跳跃式,两个第1,下一个就是第3
dense_rank():非跳跃式,两个第1,下一个是第2

目录

  • 基础
    • analytic_function
    • analytic_clause
    • query_partition_clause
    • order_by_clause
    • windowing_clause
  • 应用
    • 1.对选修C13课程的学生,按分数跳跃式排名(可以并列),显示名次与学号,按名次、学号升序排列。
    • 2.查询每门课程考试成绩第一名(可以并列)的学生的学号与课程号,按课程号升序排列。
    • 3.按平均分数对课程连续排名(可以并列),显示名次、课程号与平均分数(保留2位小数),按名次、课程号升序排列。
    • 4.查询每门课程的课程号,以及每门课程考试成绩第一名(可以并列)的学生的姓名,按课程号与姓名升序排列。

基础

analytic_function

analytic_function([ arguments ]) OVER (analytic_clause)

analytic_clause

[ query_partition_clause ] [ order_by_clause [ windowing_clause ] ]

Use OVER analytic_clause to indicate that the function operates on a
query result set. This clause is computed after the FROM, WHERE, GROUP
BY, and HAVING clauses. You can specify analytic functions with this
clause in the select list or ORDER BY clause. To filter the results of
a query based on an analytic function, nest these functions within the
parent query, and then filter the results of the nested subquery.
使用OVER analytic_clause表示该函数对查询结果集进行操作。 该子句是在FROM,WHERE,GROUP BY和HAVING子句之后计算的。 您可以在选择列表或ORDER BY子句中使用此子句指定分析函数。 要基于分析函数过滤查询结果,请将这些函数嵌套在父查询中,然后过滤嵌套子查询的结果。

query_partition_clause

PARTITION BY{ expr[, expr ]...| ( expr[, expr ]... )}

Use the PARTITION BY clause to partition the query result set into groups based on one or more value_expr. If you omit this clause, then the function treats all rows of the query result set as a single group.
使用PARTITION BY子句可将查询结果集基于一个或多个value_expr分组。 如果省略此子句,则该函数会将查询结果集的所有行都视为一个组。

order_by_clause

ORDER [ SIBLINGS ] BY
{ expr | position | c_alias }
[ ASC | DESC ]
[ NULLS FIRST | NULLS LAST ][, { expr | position | c_alias }[ ASC | DESC ][ NULLS FIRST | NULLS LAST ]]...

windowing_clause

Some analytic functions allow the windowing_clause

{ ROWS | RANGE }
{ BETWEEN{ UNBOUNDED PRECEDING| CURRENT ROW| value_expr { PRECEDING | FOLLOWING }} AND{ UNBOUNDED FOLLOWING| CURRENT ROW| value_expr { PRECEDING | FOLLOWING }}
| { UNBOUNDED PRECEDING| CURRENT ROW| value_expr PRECEDING}
}

应用

用到的表结构如下.成绩表

1.对选修C13课程的学生,按分数跳跃式排名(可以并列),显示名次与学号,按名次、学号升序排列。

select 学号,rank() over( order by 分数 desc nulls last)名次,分数
from a_db.成绩
where 课程号='C13'
order by 名次,学号;

2.查询每门课程考试成绩第一名(可以并列)的学生的学号与课程号,按课程号升序排列。

select 课程号,学号,分数
from(select 学号,分数,课程号,rank() over(partition by 课程号 order by 分数 desc nulls last )名次 from a_db.成绩)
where 名次=1
order by 课程号;

3.按平均分数对课程连续排名(可以并列),显示名次、课程号与平均分数(保留2位小数),按名次、课程号升序排列。

select 名次,课程号,round(平均分数,2) 平均分
from (select 课程号,dense_rank() over(order by avg(分数) desc)名次,avg(分数) 平均分数 from a_db.成绩 group by 课程号)
order by 名次,课程号;

4.查询每门课程的课程号,以及每门课程考试成绩第一名(可以并列)的学生的姓名,按课程号与姓名升序排列。

select 课程号,姓名
from (select 课程号,姓名,rank() over(partition by 课程号 order by 分数 desc nulls last) 排名 from a_db.成绩 natural join a_db.学生)
where 排名=1
order by 课程号,姓名;


CREATE TABLE 成绩
(学号 VARCHAR2(4 BYTE) NOT NULL,课程号 VARCHAR2(5 BYTE) NOT NULL ,
分数 NUMBER(3, 0) ,
绩点 NUMBER(3, 1)
);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S101','C01',65,18);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S102','C01',83,39.6);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S103','C01',69,24);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S104','C01',81,39.6);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S105','C01',79,36);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S106','C01',68,24);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S107','C01',77,32.4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S108','C01',76,32.4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S109','C01',76,32.4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S201','C01',91,48);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S202','C01',95,48);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S203','C01',83,39.6);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S204','C01',77,32.4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S205','C01',77,32.4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S206','C01',92,48);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S207','C01',92,48);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S208','C01',72,27.6);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S209','C01',69,24);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S301','C01',66,18);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S302','C01',58,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S303','C01',45,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S304','C01',83,39.6);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S305','C01',65,18);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S306','C01',76,32.4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S307','C01',57,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S308','C01',77,32.4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S309','C01',68,24);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S310','C01',86,44.4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S311','C01',84,39.6);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S101','C02',81,9);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S102','C02',82,9.9);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S103','C02',83,9.9);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S104','C02',82,9.9);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S105','C02',76,8.1);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S106','C02',75,8.1);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S107','C02',61,3);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S108','C02',74,6.9);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S109','C02',76,8.1);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S201','C02',92,12);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S202','C02',72,6.9);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S203','C02',69,6);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S204','C02',37,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S205','C02',62,3);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S206','C02',44,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S207','C02',55,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S208','C02',66,4.5);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S209','C02',69,6);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S301','C02',76,8.1);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S302','C02',76,8.1);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S303','C02',79,9);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S304','C02',72,6.9);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S305','C02',81,9);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S306','C02',82,9.9);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S307','C02',83,9.9);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S308','C02',79,9);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S309','C02',68,6);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S310','C02',86,11.1);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S311','C02',84,9.9);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S101','C03',84,16.5);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S102','C03',73,11.5);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S103','C03',56,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S104','C03',91,20);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S105','C03',95,20);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S106','C03',81,15);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S107','C03',73,11.5);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S108','C03',84,16.5);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S109','C03',66,7.5);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S201','C03',83,16.5);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S202','C03',71,10);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S203','C03',81,15);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S204','C03',68,10);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S205','C03',92,20);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S206','C03',83,16.5);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S207','C03',65,7.5);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S208','C03',37,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S209','C03',62,5);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S301','C03',76,13.5);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S302','C03',76,13.5);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S303','C03',79,15);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S304','C03',72,11.5);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S305','C03',81,15);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S306','C03',8,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S307','C03',45,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S308','C03',79,15);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S309','C03',68,10);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S310','C03',86,18.5);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S311','C03',84,16.5);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S101','C13',74,9.2);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S102','C13',63,4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S104','C13',81,12);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S105','C13',85,14.8);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S107','C13',63,4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S108','C13',74,9.2);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S202','C13',63,4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S203','C13',73,9.2);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S205','C13',84,13.2);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S206','C13',null,null);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S207','C13',60,4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S209','C13',57,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S301','C13',78,12);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S302','C13',78,12);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S304','C13',74,9.2);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S305','C13',83,13.2);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S307','C13',87,14.8);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S308','C13',81,12);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S310','C13',88,14.8);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S311','C13',86,14.8);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S101','C14',33,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S103','C14',66,6);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S104','C14',61,4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S106','C14',81,12);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S107','C14',85,14.8);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S109','C14',65,6);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S201','C14',60,4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S202','C14',42,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S204','C14',52,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S205','C14',63,4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S207','C14',null,null);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S208','C14',70,8);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S303','C14',72,9.2);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S304','C14',81,12);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S306','C14',80,12);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S307','C14',51,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S101','C24',88,12);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S102','C24',68,6);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S103','C24',72,6.9);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S101','C25',65,4.5);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S102','C25',38,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S103','C25',61,3);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S104','C25',90,12);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S105','C25',54,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S106','C25',null,null);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S107','C25',86,11.1);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S108','C25',60,3);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S109','C25',78,9);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S103','C13',46,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S106','C13',71,8);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S109','C13',56,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S201','C13',56,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S204','C13',60,4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S208','C13',32,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S303','C13',81,12);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S306','C13',10,0);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S309','C13',70,8);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S102','C14',93,16);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S105','C14',63,4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S108','C14',80,12);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S203','C14',61,4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S206','C14',61,4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S209','C14',93,16);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S305','C14',60,4);
Insert into A_DB."成绩" ("学号","课程号","分数","绩点") values ('S308','C14',60,4);

Analytic Functions 分析函数(rank over)相关推荐

  1. Oracle 分析函数(Analytic Functions) 说明

    一.  Analytic Functions 说明 分析函数是oracle 8中引入的一个概念,为我们分析数据提供了一种简单高效的处理方式. 官方对分析函数的说明如下: Analytic functi ...

  2. Analytic Functions in Oracle 8i and 9i

    原文地址:http://balance9.bokee.com/5534690.html Analytic Functions in Oracle 8i and 9i Oracle 8i and 9i分 ...

  3. [转]oracle分析函数Rank, Dense_rank, row_number

    oracle分析函数Rank, Dense_rank, row_number 分析函数2(Rank, Dense_rank, row_number)   目录 ==================== ...

  4. oracle 更新flwid,Oracle分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法

    今天工作过程中用到了Oracle的分析函数,在网上查到以下文章,转到这里,以备后用! Oracle分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法 ROW_NUMBER() OV ...

  5. 学习Oracle分析函数(Analytic Functions)

    Oracle提供了一些功能很强大的分析函数,使用这些函数可以完成可能需要存储过程来实现的需求. 分析函数计算基于一组数据行的聚合值,它们不同于聚合函数的是,它们为每一组返回多行结果.分析函数是除ORD ...

  6. 分析函数RANK的使用

    有这么一个表table1 username subject score 张三 语文 80 张三 数学 90 张三 英语 88 李四 语文 90 李四 数学 92 李四 英语 94 王五 语文 62 王 ...

  7. Oracle分析函数-rank() over(partition by...order by...)

    select *from ( SELECT t.s#,---学号 t.c#,---课程号 T.SCCORE, ---成绩 RANK() OVER(PARTITION BY t.c# ORDER BY ...

  8. jquery ajax json文件,jQuery ajax读取本地json文件

    jQuery ajax读取本地json文件 json文件 { "first":[ {"name":"张三","sex": ...

  9. Oracle 聚合函数(Aggregate Functions)说明

    Oracle Aggregate Functions用过很多,官网的说明如下: Aggregate Functions http://docs.oracle.com/cd/E11882_01/serv ...

最新文章

  1. 深入理解 Spring Cloud 核心组件与底层原理
  2. JS浮点数运算Bug的解决办法
  3. 【Mysql】纯sql报表
  4. 袁隆平等专家联袂直播 启动农民丰收节交易会消费季活动
  5. nginx指令(alias、set、proxy_pass、rewrite、upstream)、跨域问题、防盗链、缓存、gzip压缩
  6. Linux vim的三种模式
  7. linux授权文件夹给用户_一项一项教你测等保2.0——Linux访问控制
  8. 一个支持Abort的BackgroundWorker
  9. css3 背景等比例,纯 CSS,不用背景,实现图片等比例展示
  10. openlayers实例_介绍OpenLayers
  11. Alpine Linux:从漏洞发现到代码执行
  12. java 快速从树节点找到数据_数据结构与算法:单向链表和双向链表
  13. 立即更新 Chrome 浏览器!这个 0day 已遭在野利用
  14. 粗浅看 Tomcat系统架构分析
  15. plt文件怎么转化为txt文件
  16. 微信订阅号改回列表显示
  17. 鼠标右键发现“新建功能菜单”不见了的解决方案
  18. word怎么恢复保存前的文件,word文件恢复
  19. matlab plotyy 坐标轴设置,[转载]Matlab plotyy画双纵坐标图实例
  20. 如何以管理员身份运行powerShell

热门文章

  1. 每日一题(字符串拆分)
  2. phpmyadmin底部出现提示“The configuration file now needs a secret passphrase (blowfish_secret). ”...
  3. Xcode 小技巧:利用 assets 配置针对不同设备的资源
  4. Factory-pattern 三种工厂模式
  5. IE8经常停止工作和显示异常
  6. 前端基础---HTML
  7. PHP如何进阶,提升自己
  8. 设计模式入门之原型模式Prototype
  9. FindAllAnagramsinaString
  10. openstack网络服务neutron