目前有如下棘手问题请教,在oracle有一个大客户表,记录在千万级。
表内字段大概有 (机构、客户名称、金额)现在需要查询出不同的机构下金额前百大客户,插入另一张报表方便查询。表中的机构有几百个,如果循环查询不同机构的百大客户,循环执行几百个   order by语句,效率非常低下,请问有没有更好的方法实现以上需求????

解决方案 »

  1.   

    select * from 
    (
    select 机构,客户名称,金额, rank() over (partition by 机构 order by 金额 desc) rk
    from 大客户表
    )
    where rk <= 100
      

  2.   

    使用row_numberselect * from 
    (
    select * , row_number() over(partition by 机构 order by 客户) px from tb
    ) t
    where px <= 100
      

  3.   


    --相同的金额呢 并列 去前100?select 机构,客户名称,金额
    from (select 机构,客户名称,金额,rank() over(partition by 机构 order by 金额 desc) rn
    from 客户表) a
    where rn<=100