数据库分析函数 rank()和dense_rank()
开发人员想统计不同机构中排名靠前的ID号,通过使用rank()和dense_rank函数可以帮助解决此类问题.
数据库现有数据
JG_ID ID BAL
---------- ---------- ----------
1 1 555.34
1 2 323.34
1 5 523.34
1 7 3333.34
2 1 123.34
2 2 323.34
2 5 523.34
2 7 2222.34
1 9 555.34
查出每个jg_id组,余额前3名ID.
select * from (select rank() over(partition by jg_id order by bal desc) bba,jg.* from jg) t where t.bba<=3
BBA JG_ID ID BAL
---------- ---------- ---------- ----------
1 1 7 3333.34
2 1 1 555.34
2 1 9 555.34
1 2 7 2222.34
2 2 5 523.34
3 2 2 323.34
使用dense_rank函数可以防止有排名一样的数据挤掉其他数据.
select * from (select dense_rank() over(partition by jg_id order by bal desc) bba,jg.* from jg) t where t.bba<=3
BBA JG_ID ID BAL
---------- ---------- ---------- ----------
1 1 7 3333.34
2 1 1 555.34
2 1 9 555.34
3 1 5 523.34
1 2 7 2222.34
2 2 5 523.34
3 2 2 323.34
可以看到使用了dense_rank后,第三名的数据才显示出来.
Oracle还有大量的分析函数,需要进行探索.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/19446/viewspace-164237/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/19446/viewspace-164237/