假设我有一张这样的表:
A B 3
C D 1
E F 2
G H 4
最后一列的总和是10,我希望最大值总和至少占总值的60%。所以,在这种情况下,它将返回
G H 4
A B 3
它上升到70%,但如果只选择第一个值,它将只上升到40%。即使可能会有一个组合将返回60%,我们希望获得最大的数字。
所以,我想我知道如何将值从大到小排序以及如何总结所有值,但我不知道如何只采用总计达60%的行。
答案 0 :(得分:4)
--save the whole sum into a variable
summa = select sum(val) from sometable;
select *
from sometable o
where (
select sum(val)
from sometable i
where i.val <= o.val
) >= 0.6*summa;
答案 1 :(得分:3)
我认为这会给你正确的结果。但是,需要使用临时表,不确定是否可以避免这种情况。
DECLARE @total bigint
select @total = SUM(value) from SampleTable
select st.*,
convert(decimal(10,2), (select SUM(value) from SampleTable st2 where st2.Value >= st.Value))/@total as percentage
into #temptable
from sampletable st
select * from #temptable
where Value >= (select max(Value) from #temptable where percentage >= 0.6)