我现在有一张表A,三个字段:
采购部门 cgbm
供应商编码 gysbm
采购订单金额 ddje
现在需要按采购部门统计供应商总金额的情况,当然,如果是按照采购部门直接合计所有供应商的订单金额,是很容易:
select cgbm,sum(ddje)
from a
group by cgbm
但是我们领导想看主力供应商的订单金额情况,所谓的主力供应商,就是指采金额排在本部门前五分之一的供应商,合计他们的订单总金额,比如,“采购一部”一共有200个供应商,“采购二部”有250个供应商,那么对“采购一部”订单金额汇总时,只汇总订单金额排在“采购一部”前40名的供应商的订单金额,而采购二部要汇总排在“采购二部”前50名供应商的订单金额。
现在采购部门很多,每个采购部的供应商的数量也是未知,怎么去写这个SQL语句呢?
附:如果我只查询某一个已知部门的主力供应商订单金额情况,也是比较简单
select sum(ddje)
from(
select gysbm,ddje
from a
where a.cgbm='采购一部'
order by a.ddje desc
)
where rownum<round(0.2*(select count(*)
from a
where a.cgbm='采购一部')) 各位高手,有什么好注意,不妨告诉我,在下感激不尽。
采购部门 cgbm
供应商编码 gysbm
采购订单金额 ddje
现在需要按采购部门统计供应商总金额的情况,当然,如果是按照采购部门直接合计所有供应商的订单金额,是很容易:
select cgbm,sum(ddje)
from a
group by cgbm
但是我们领导想看主力供应商的订单金额情况,所谓的主力供应商,就是指采金额排在本部门前五分之一的供应商,合计他们的订单总金额,比如,“采购一部”一共有200个供应商,“采购二部”有250个供应商,那么对“采购一部”订单金额汇总时,只汇总订单金额排在“采购一部”前40名的供应商的订单金额,而采购二部要汇总排在“采购二部”前50名供应商的订单金额。
现在采购部门很多,每个采购部的供应商的数量也是未知,怎么去写这个SQL语句呢?
附:如果我只查询某一个已知部门的主力供应商订单金额情况,也是比较简单
select sum(ddje)
from(
select gysbm,ddje
from a
where a.cgbm='采购一部'
order by a.ddje desc
)
where rownum<round(0.2*(select count(*)
from a
where a.cgbm='采购一部')) 各位高手,有什么好注意,不妨告诉我,在下感激不尽。
(select cgbm,ddje,(row_number()over (partition by cgbm order by ddje DESC) ) rn
from a
) t,(select cgbm,count(*) n from a group by cgbm) m
where t.cgbm = m.cgbm and
t.rn<round(0.2*m.n)
group by t.cgbm
按照cgbm分组并按照ddje从大到小排列。 理解这句就不难了。另 t.rn<round(0.2*m.n) 为
t.rn<=round(0.2*m.n) 吧