oracle rank 语法_Oracle排名函数(Rank)实例详解

--

已知:两种排名方式

(

分区和不分区

):

使用和不使用

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


版权声明:本文为weixin_36127981原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。