18802 13009060195 9 18830 13009063333 7 //分析: //这不是一个很难的问题, /*********分组统计***
oracle row_number分析函数简化了我们的很多操作
[日期:2011-05-04] 来源:Linux社区 作者:BOBO12082119 [字体:]
//问题:
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;

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号