目前有如下棘手问题请教,在oracle有一个大客户表,记录在千万级。
表内字段大概有 (机构、客户名称、金额)现在需要查询出不同的机构下金额前百大客户,插入另一张报表方便查询。表中的机构有几百个,如果循环查询不同机构的百大客户,循环执行几百个 order by语句,效率非常低下,请问有没有更好的方法实现以上需求????
表内字段大概有 (机构、客户名称、金额)现在需要查询出不同的机构下金额前百大客户,插入另一张报表方便查询。表中的机构有几百个,如果循环查询不同机构的百大客户,循环执行几百个 order by语句,效率非常低下,请问有没有更好的方法实现以上需求????
(
select 机构,客户名称,金额, rank() over (partition by 机构 order by 金额 desc) rk
from 大客户表
)
where rk <= 100
(
select * , row_number() over(partition by 机构 order by 客户) px from tb
) t
where px <= 100
--相同的金额呢 并列 去前100?select 机构,客户名称,金额
from (select 机构,客户名称,金额,rank() over(partition by 机构 order by 金额 desc) rn
from 客户表) a
where rn<=100