oracle count over partition by,over (Partition by...) of oracle

本文详细介绍了SQL中的窗口函数rank()、dense_rank()和row_number()的使用方法和区别。这三个函数常用于数据分组和排序,rank()在遇到相同值时会产生并列排名;dense_rank()则会跳过并列后的空位;row_number()为每条记录分配唯一的连续编号。通过实例展示了如何在查询中应用这些函数,以获取每个分组内的排名信息。
摘要由CSDN通过智能技术生成

over()分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。

例子:

select *from (select name,class,score,rank() over(partition by class order by score desc) mm from t2 ) where mm=1

通过class班级进行分组,并根据score分数进行排序,用rank()函数排序方法为mm列赋予序号,然后mm=1就可以找到每组的第一名,当然可以根据score就行倒序可以找到最后一名。

row_number() over(partition by ... order by ...)

简单的说row_number()从1开始,为每一条分组记录返回一个数字, row_number() over(order by score desc)是先把score 列降序,再为降序以后的没条xlh记录返回一个序号。(如果没有分组可以理解成将整个结果作为一个分组)

row_number() over(partition by class order by score desc)表示根据class分组,在分组内部根据 score 排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

rank() over(partition by ... order by ...)

dense_rank() over(partition by ... order by ...)

作为分数函数中有关排序的rank(),dense_rank(),row_number()。

rank() over是的作用是查出指定条件后进行一个排名,但是有一个特点。假如是对学生排名,那么实用这个函数,成绩相同的两名是并列(名次为1,2,2,4)

dense_rank()的作用和rank()很像,唯一区别就是,相同成绩并列以后,下一位同学并不空出并列所占的名次(名次为1,2,2,3)

row_number()就不一样了,它和上面两种的区别就很明显了,这个函数不需要考虑是否并列,哪怕根据条件查询出来的数值相同也会进行连续排名。

对于多表查询,可以为空置加上一个判断来显示查询数据为空的数据。

case when score is null then 1 else rank() over (partition by class order by score desc ) end as mm

其他常用的分析函数:

count() over(partition by ... order by ...) max() over(partition by ... order by ...) min() over(partition by ... order by ...) sum() over(partition by ... order by ...) avg() over(partition by ... order by ...) first_value() over(partition by ... order by ...) last_value() over(partition by ... order by ...) lag() over(partition by ... order by ...) lead() over(partition by ... order by ...)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值