找出>=80%的前N项数据

 

--找出>=80%的前N项数据
select 1 as Value,0.00 as P  INTo #T   
INSERT INTo #T select 18,0.00  
INSERT INTo #T select 14,0.00  
INSERT INTo #T select 3,0.00  
INSERT INTo #T select 13,0.00  
INSERT INTo #T select 5,0.00  
INSERT INTo #T select 20,0.00  
INSERT INTo #T select 7,0.00  
INSERT INTo #T select 9,0.00  
INSERT INTo #T select 12,0.00  
INSERT INTo #T select 10,0.00  
INSERT INTo #T select 8,0.00  
INSERT INTo #T select 15,0.00  
INSERT INTo #T select 22,0.00  
INSERT INTo #T select 30,0.00  

--计算百分比
Update #T set P=CAST(Value as numeric(18, 2))/(select sum(Value) from #T)   

--原始数据
select * from #T  Order By Value desc  

--SQL找到累计求和不超出90%的前N条记录
select  a.Value,a.P,SUM(b.P) as '累计求和' INTO #Result from #T a left join #T b on a.Value<=b.Value   
group by a.Value,a.P  having SUM(b.P)<=0.9 Order By a.Value desc  

---得到最后的结果数据
select Value,p,累计求和 from #Result where 累计求和<=(select Min(累计求和) from #Result where 累计求和>=0.8)

drop table #Result  
drop table #T  




--------------------------------------------------------------方式二--------------------------------------------------------

--找出>=80%的前N项数据
select 1 as Value,0.00 as P  INTo #T   
INSERT INTo #T select 18,0.00  
INSERT INTo #T select 14,0.00  
INSERT INTo #T select 3,0.00  
INSERT INTo #T select 13,0.00  
INSERT INTo #T select 5,0.00  
INSERT INTo #T select 20,0.00  
INSERT INTo #T select 7,0.00  
INSERT INTo #T select 9,0.00  
INSERT INTo #T select 12,0.00  
INSERT INTo #T select 10,0.00  
INSERT INTo #T select 8,0.00  
INSERT INTo #T select 15,0.00  
INSERT INTo #T select 22,0.00  
INSERT INTo #T select 30,0.00  

--计算百分比
Update #T set P=CAST(Value as numeric(18, 2))/(select sum(Value) from #T)   

declare @p  decimal(18, 2)=0.80

--原始数据
select * from #T  order by Value desc
--排序数据
select value,p,0.0 as _P into #data from #T order by Value desc
--依次递减
update #data set @p=@p-p,p=@p,_P=@p

select * from #data where _P>=0 order by Value desc

drop table #data
drop table #T  


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值