在Oracle中使用rank()over()排名的問題

來源:互聯網
上載者:User

今天遇到一個問題:

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怎麼解決,不詳。特記錄於此,具體原因有時間再深究。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.