oracle——分析函数——排序值分析函数
2015-07-29 15:31
435 查看
一、问题描述
查询列表时,我们有时需要对查询结果依据某个字段进行排名。
如果每条记录在排序字段上都不相同,我们可以将原查询作为一个视图,查询其rownum,便可以实现简单排序,例如:
但是,很多时候我们想用来排序的字段都是有重复值的,此时可能需要将值相同的记录名词并列,那么我们就需要用到oracle的分析函数了。
二、解决
1.排序字段相同的名次并列,且所有名次连续
3000元的员工有两个,他们的名词并列,且下一个用户的名词连续计数(区别于2)
2.排序字段相同的名次并列,且下一个名次是跳跃排序的,比如,有两个第二名时,下一个就是第四名
三、其他
有时,我们需要将不同部门下的员工进行排名,此时,我们需要使用
按照column1分组,然后在组内,按照column2排序。
四、扩展
需求:统计用户签到排名
每个用户每次签到生成一条数据,统计每个用户签到的总次数然后排名,为用户显示签到排名。
1.连续排名,相同次数的用户名次并列
2.不连续排名
查询列表时,我们有时需要对查询结果依据某个字段进行排名。
如果每条记录在排序字段上都不相同,我们可以将原查询作为一个视图,查询其rownum,便可以实现简单排序,例如:
select rownum,e.* from emp e;
但是,很多时候我们想用来排序的字段都是有重复值的,此时可能需要将值相同的记录名词并列,那么我们就需要用到oracle的分析函数了。
二、解决
1.排序字段相同的名次并列,且所有名次连续
select dense_rank() over(order by sal desc) rk,e.ename,e.sal from emp e;
3000元的员工有两个,他们的名词并列,且下一个用户的名词连续计数(区别于2)
2.排序字段相同的名次并列,且下一个名次是跳跃排序的,比如,有两个第二名时,下一个就是第四名
select rank() over(order by sal desc) rk,e.ename,e.sal from emp e;
三、其他
有时,我们需要将不同部门下的员工进行排名,此时,我们需要使用
row_number() over(partition by column1 order by column2)
按照column1分组,然后在组内,按照column2排序。
select row_number() over(partition by e.job order by e.sal) rk,e.job,e.ename,e.sal from emp e;
四、扩展
需求:统计用户签到排名
每个用户每次签到生成一条数据,统计每个用户签到的总次数然后排名,为用户显示签到排名。
1.连续排名,相同次数的用户名次并列
select dense_rank()over(order by cnt desc) RANKING,b.* from ( select count(1) cnt, user_id from MIC_TD_EXERCISE_SIGNIN group by user_id order by cnt DESC) b;
2.不连续排名
select rank() over(order by cnt desc) ranking,b.* from ( select count(1) cnt, user_id from MIC_TD_EXERCISE_SIGNIN group by user_id order by cnt DESC) b;
相关文章推荐
- Oracle存储过程学习笔记
- ORACLE ORA-01653: unable to extend table 的错误(转)
- Oracle 学习之RMAN(三)全量备份
- Oracle 表id实现自增
- Oracle 查询用户表信息,导入导出处理表空间不一致
- ORACLE統計信息收集
- Oracle 学习之RMAN(二)由此开始
- oracle最高账号sys的密码认证模式
- oracle11g exp导出问题:部分表导不出来
- ORACLE各种常见java.sql.SQLException归纳
- 关于安装toad for oracle 10.6的一些问题
- 关于oracle用户密码过期的解决方法
- kettle创建Oracle数据库连接遇到的问题
- 谈谈怎么实现Oracle数据库分区表
- oracle中行转列函数
- PHP操作Oracle数据库
- Oracle触发器实现自动编号
- mysql中case-when-then和oracle的decode函数
- MySQL Study之--MySQL数据类型与Oracle数据类型对比
- CentOS 6.5_x64安装Oracle 11g R2 亲测