Oracle 10g的数据库
要求统计表中每个类型(差不多20多个类型) 的前十名(如果不足10名,有多少算多少)
然后汇总算笔数和总数
我临时用的办法是 建个临时表 按每个类型的的前十名直接插到这个表里
然后再跟原表关联求得(汇总)
不知道有没有更好的办法
可以直接一句话求出 或者有什么好的函数
谢谢
要求统计表中每个类型(差不多20多个类型) 的前十名(如果不足10名,有多少算多少)
然后汇总算笔数和总数
我临时用的办法是 建个临时表 按每个类型的的前十名直接插到这个表里
然后再跟原表关联求得(汇总)
不知道有没有更好的办法
可以直接一句话求出 或者有什么好的函数
谢谢
解决方案 »
- scott账户不存在,痛苦啊
- .net链接oracle数据库下面SQL语句的问题
- 各位帮忙看一下。我的存储过程总是编译不过去,实在找不出哪错了。
- 请问如何捕获客户端程序利用oracle OCI 访问数据库的事务
- order by 是如何处理的
- 求助:asp+orcal,在录入数据的时候提示"违反唯一性约束条件",但是能正常录入的问题。
- Exp 问题
- 初学者的问题,请帮忙,谢谢。
- ********oracle高手请看!!! intermedia中的filter问题!!!!!!!!!!!!!高分相赠!!!!!!
- 求大神指点,update循环增加
- 100分题:如何对多条字符串记录进行"汇总"运算?
- 简单的查询语句问题
select tab.t1 行业,tab.t2 笔数,tab.t3 金额 from (select 行业 t1,count(*) t2,sum(金额) t3 from your_table group by 行业 order by t2) tab where tab.rownm<=10;
from
(
select a.*,dense_rank() over (partition by 行业 order by 排名条件) rn
from a
)
where rn<=10
group by 行业
这个只是求所有的分类汇总
我现在要求的是各个类型的前十名的分类汇总
比如
#type cutid sum
A A11 100.00
A A22 50
. . .
. . .
A ANN 100.00
B B11 10.00
B B22 10.00
. . .
. . .
B BNN 10.00根据金额排序 找A类的前十名
B类的前十名
然后统计其数目和金额之和
from
(
select a.*,dense_rank() over (partition by 行业 order by 排名条件) rn
from a
)
where rn<=10
group by 行业
要用以下几个分析函数
row_number() over 顺序排序,无并列排名,最多10个
rank() over 顺序排名,有并列排名,并跳过并列名次,比如说第一名有3个,那接下来就是第四名,没有2,3名,最终纪录>=10
dense_rank() over 顺序排名,有并列排名,不跳名次,这样前十名的话,最终纪录会>=10,会多于rank的
也就是说同样的数据,最后符合条件的纪录条数
dense_rank() over>=rank() over>=row_number() over