当前位置:  数据库>oracle

Oracle row_number分析函数简化了我们的很多操作

    来源: 互联网  发布时间:2017-04-03

    本文导语: //问题:   CI  MSISDN      CNT   18802   13009060195 9   18830   13009060195 1   18837   13009060195 2   18829   13009063333 5   18830   13009063333 7   18847   13009063333 4   //结果:   CI  MSISDN      CNT   18802   13009060195 9   18830   1300...

//问题:  
CI  MSISDN      CNT  
18802   13009060195 9  
18830   13009060195 1  
18837   13009060195 2  
18829   13009063333 5  
18830   13009063333 7  
18847   13009063333 4  
//结果:  
CI  MSISDN      CNT  
18802   13009060195 9  
18830   13009063333 7  
//此问题是想把MSISDN相同的项的CNT查询出来  
//碰到此问题,我是这么思考的:  
//首先,将MSISDN相同的项的CNT查询出来,构成一个结果集:  
with t as(  
     select '18802' ci,'13009060195' msisdn,9 cnt from dual union all  
     select '18830','13009060195',1 from dual union all  
     select '18837','13009060195',2 from dual union all  
     select '18829','13009063333',5 from dual union all  
     select '18830','13009063333',7 from dual union all  
     select '18847','13009063333',4 from dual)  
select msisdn,max(cnt) cnt  
from t  
group by msisdn  
--  
MSISDN             CNT  
----------- ----------  
13009060195          9  
13009063333          7  
//其次,将原表与此结构集相匹配,如果MSISDN和CNT都相同的就提出来  
select t.*  
from t,(  
     select msisdn,max(cnt) cnt  
     from t  
     group by msisdn  
     ) b  
where t.msisdn=b.msisdn and   
      t.cnt=b.cnt;  
//这样就能得到我们想要的结果,如下:  
CI    MSISDN             CNT  
----- ----------- ----------  
18802 13009060195          9  
18830 13009063333          7  
//分析:  
//这不是一个很难的问题,  
/*********分组统计******/ 
//可这又是子查询,又是表连接的,怎么那么费事呢?  
//肯定还有更好的解决方法:  
select ci,msisdn,cnt   
from (select ci,  
             msisdn,  
             cnt,  
             row_number()over(partition by msisdn order by cnt desc) rn from t)  
where rn=1; 






















































    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 系统变量函数介绍
  • Oracle 系统变量函数用法指南
  • Oracle中decode函数的用法
  • Oracle round()函数与trunc()函数区别介绍
  • oracle中lpad函数的用法详解
  • MySQL实现类似Oracle中的decode()函数的功能
  • Oracle函数substr(str1, pos, [len])
  • Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
  • SQL中Charindex和Oracle中对应的函数Instr对比
  • apache通过php的oci函数读取Oracle(字符集ZHS16GBK)时,显示乱码,如何解决?
  • Oracle Max函数使用中出现的问题
  • oracle合并列的函数wm_concat的使用详解
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • c#中oracle to_date函数用法举例
  • Oracle 函数用法之decode
  • Oracle过程与函数的区别分析
  • Oracle层次查询和with函数的使用示例
  • oracle的nvl函数的使用介绍
  • c#中oracle的to_date函数使用方法
  • Oracle中nul()函数
  • Oracle 12c发布简单介绍及官方下载地址
  • Oracle层次查询和with函数的使用示例 iis7站长之家
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3