zoukankan      html  css  js  c++  java
  • 在Oracle中使用rank()over()排名的问题

    今天遇到一个问题:

    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怎么解决,不详。特记录于此,具体原因有时间再深究。


  • 相关阅读:
    nodejs 获取客户端 ip 地址
    如何使用 nvm-windows 管理 nodejs 版本
    redis 环境搭建
    利用 ssh 传输文件
    如何在 Centos7 中安装 gcc
    如何在 Centos7 中安装 nginx
    django迁移model到别的app中
    ssl生成证书
    pip安装mysql报错 ld: library not found for -lssl
    mac重置蓝牙模块
  • 原文地址:https://www.cnblogs.com/blogyuan/p/2983144.html
Copyright © 2011-2022 走看看