Oracle 10g的数据库
要求统计表中每个类型(差不多20多个类型) 的前十名(如果不足10名,有多少算多少)
然后汇总算笔数和总数
我临时用的办法是 建个临时表 按每个类型的的前十名直接插到这个表里
然后再跟原表关联求得(汇总)
不知道有没有更好的办法
可以直接一句话求出 或者有什么好的函数
谢谢

解决方案 »

  1.   

    select 行业 ,count(*) ,sum(金额) from your_table group by 行业;
      

  2.   

    试一下:
    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;
      

  3.   

    select 行业 ,count(*) ,sum(金额)
       from 
    (
    select a.*,dense_rank() over (partition by 行业 order by 排名条件) rn
        from a

      where rn<=10
    group by 行业
      

  4.   


    这个只是求所有的分类汇总
    我现在要求的是各个类型的前十名的分类汇总
    比如
    #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类的前十名
    然后统计其数目和金额之和   
      

  5.   

    select 行业 ,count(*) ,sum(金额)
       from 
    (
    select a.*,dense_rank() over (partition by 行业 order by 排名条件) rn
        from a

      where rn<=10
    group by 行业
      

  6.   

    你这个只能对单一行业有效,对多行业的话,有问题的这种要分组求前几名的
    要用以下几个分析函数
    row_number() over  顺序排序,无并列排名,最多10个
    rank()   over   顺序排名,有并列排名,并跳过并列名次,比如说第一名有3个,那接下来就是第四名,没有2,3名,最终纪录>=10
    dense_rank() over 顺序排名,有并列排名,不跳名次,这样前十名的话,最终纪录会>=10,会多于rank的
    也就是说同样的数据,最后符合条件的纪录条数
    dense_rank() over>=rank()   over>=row_number() over