数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

oraclerank()函数总结


发布日期:2022年03月25日
 
oraclerank()函数总结

首先要了解rank在英语的意思等级也就是说这是一个给数据确定等级的函数

以销售为例有地区销售员销售额记录这五个字段我们可以按地区销售额对销售员进行排序这样对销售员来说就相当于有一个等级概念了第一名就是销售最高的如果我们要找出每个地区销售额的前三名销售员SQL如何写?

Sql代码

SELECT area_code YEAR MONTH saleroomsaler

RANK () OVER (PARTITION BY area_codeyear month ORDER BY area_codeyearmonthsaleroom ) RANK

FROM t_sale

Sql代码

SELECT

RANK(SHENZHEN) WITHIN GROUP

(ORDER BY area_codeyearmonthsaleroom) Rank

FROM T_SALE

上面这个SQL就可以搞定了要注意的是Rank()里的参数必须为常数或常值表达式里面参数的个数类型也要和order by后字段的类型相对应

上面就是Rank函数的两个用法另外还有一个dense_rank()它的用法和rank()一样只是计算等级的方式不同例如上面的

用dense_rank() 就是

其实现在Oracle对于rank和dense_rank已经支持合计功能不过这次我仅仅使用了其分析功能具体语法如下RANK ( ) OVER ( [query_partition_clause] order_by_clause )

下面给出一些来自网上的示例

TABLES (subjectmark)

数学

语文

数学

数学

数学

语文

语文

语文

现在我想要的结果是每门科目的前名的分数

数学

数学

数学

语文

语文

语文

那么语句就这么写

select * from (select rank() over(partition by subject order by mark desc) rkS* from S) T

where Trk<=;

dense_rank与rank()用法相当但是有一个区别dence_rank在处理相同的等级时等级的数值不会跳过rank则跳过 row_number() 补充

例如

A B C

a liu wang

a jin shu

a cai kai

b yang du

b lin ying

b yao cai

b yang

例如当rank时为

select mambmcrank() over(partition by a order by b) liu from test m

A B C LIU

a cai kai

a jin shu

a liu wang

b lin ying

b yang du

b yang

b yao cai

而如果用dense_rank时为

select mambmcdense_rank() over(partition by a order by b) liu from test m

A B C LIU

a cai kai

a jin shu

a liu wang

b lin ying

b yang du

b yang

b yao cai

而如果用row_number()时为

select mambmcrow_number() over(partition by a order by b) liu from test m

A B C LIU

a cai kai

a jin shu

a liu wang

b lin ying

b yang du

b yang

b yao cai

现在RANK 就是有了这个字段就很容易得到前三名的销售员了

新问题:销售额块在深圳月能排到第几?

               

上一篇:实例讲解Oracle密码文件的使用与维护

下一篇:oracle常用经典SQL查询