您的位置:首页 > 数据库 > Oracle

oracle分析函数(rank(),dense_rank(),row_number())

2012-08-28 14:59 525 查看
sql over的作用及用法
RANK ( ) OVER ( [query_partition_clause] order_by_clause )

--当OVER 后的内容一样是,编号一样,即会重复

或者是

row_number() OVER ( [query_partition_clause] order_by_clause )

---这个编号不会重复

DENSE_RANK ( ) OVER ( [query_partition_clause] order_by_clause )

可实现按指定的字段分组排序,对于相同分组字段的结果集进行排序,

其中PARTITION BY 为分组字段,ORDER BY 指定排序字段

over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用。

其参数:over(partition by columnname1 order by columnname2)

含义:按columname1指定的字段进行分组排序,或者说按字段columnname1的值进行分组排序。

例如:employees表中,有两个部门的记录:department_id =10和20

select department_id,rank() over(partition by department_id order by salary) from employees就是指在部门10中进行薪水的排名,在部门20中进行薪水排名。如果是partition by org_id,则是在整个公司内进行排名。

sql中的over函数和row_numbert()函数配合使用,可生成行号。可对某一列的值进行排序,对于相同值的数据行进行分组排序.

e.g:row_number() over (partition by name, kecheng,score order by rowid)

row_number() 顺序号码, 也就是 行号, 比如 1,2,3,4,5 这样的顺序。over 语法需要,必须的。partition by name, kecheng,score 是按照 name, kecheng,score 分区。也就是 如果有 不同的 name, kecheng,score , 这个 序号又重新从1开始计算。order by rowid
是 排序方式, 也就是 最小的 rowid , row_number() 是1,然后随着 rowid 的增加, row_number() 不断递增。

row_number和rownum 有什么区别?

rownum Oracle 特有的, 仅仅记录行号, 但是好像不能分组。也就是不能记录几行了,又回到1重新开始。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: