在Oracle中使用rank()over()排名的问题
2013-03-26 17:14
375 查看
今天遇到一个问题:
Code:
select row_no, roleid, roleName
from (select roleid,
roleName,
rank() over(order by sum(decode(roundrs, 1, 40, 2, 20, 3, -10, 0, 20, 0)) + 50 desc, sum(decode(roundrs, 1, 1, 0)) desc, sum(decode(roundrs, 3, 1, 0))) row_no
from (select roleId, roleName, roundIndex, roundRs
from tblContestResult
where term = 65
and vocation = 1
and levelnum = 1
group by roleId, roleName, roundIndex, roundRs)
group by roleid, roleName)
where row_no <= 3;
---rank()over(order by 列名 排序)的结果是不连续的,例如:有4个人,其中有2个是并列第1名,那么最后的排序结果结果如:1 1 3 4。
这个函数的使用导致一个奇怪的现象:sql工具查询没有问题,利用java程序查询在循环中到指定次数后,数据库报错:ORA-00942(找不到表或视图)的问题。这个问题反映到DBA那反馈给我的信息是这是oracle产品中rank() over 的bug,当然DBA很快将这个问题解决,程序就没有报错了。至于DBA怎么解决,不详。特记录于此,具体原因有时间再深究。
Code:
select row_no, roleid, roleName
from (select roleid,
roleName,
rank() over(order by sum(decode(roundrs, 1, 40, 2, 20, 3, -10, 0, 20, 0)) + 50 desc, sum(decode(roundrs, 1, 1, 0)) desc, sum(decode(roundrs, 3, 1, 0))) row_no
from (select roleId, roleName, roundIndex, roundRs
from tblContestResult
where term = 65
and vocation = 1
and levelnum = 1
group by roleId, roleName, roundIndex, roundRs)
group by roleid, roleName)
where row_no <= 3;
---rank()over(order by 列名 排序)的结果是不连续的,例如:有4个人,其中有2个是并列第1名,那么最后的排序结果结果如:1 1 3 4。
这个函数的使用导致一个奇怪的现象:sql工具查询没有问题,利用java程序查询在循环中到指定次数后,数据库报错:ORA-00942(找不到表或视图)的问题。这个问题反映到DBA那反馈给我的信息是这是oracle产品中rank() over 的bug,当然DBA很快将这个问题解决,程序就没有报错了。至于DBA怎么解决,不详。特记录于此,具体原因有时间再深究。
相关文章推荐
- Oracle中使用rank()over()排名的问题
- 在Oracle中使用rank()over()排名的问题
- 在Oracle中使用rank()over()排名的问题
- 在Oracle中使用rank()over()排名的问题 .
- 在Oracle中使用rank()over()排名的问题
- 在Oracle中使用rank()over()排名的问题
- 在Oracle中使用rank()over()排名的问题
- 在Oracle中使用rank()over()排名的问题
- 在Oracle中使用rank()over()排名的问题
- 在Oracle中使用rank()over()排名的问题
- oracle的“over partition by”的用法,over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用。
- Oracle问题——排名函数(rank与dense_rank)
- 排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句 Oracle 中分析函数用法之--rank(),dense_rank(),partition,over()
- Oracle函数over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名
- Oracle分析函数中的分组排名函数用法 Rank Over partition by
- ORACLE 中OVER()结合rank(),dense_rank(),rownumber() 使用方法
- Oracle分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法(收藏)2007-03-09 11:27Oracle分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法
- Oracle 12c安装方法及一些使用问题
- Oracle rank和dense_rank排名函数
- oracle-索引使用面试问题解答