如何选择总计达到总数的60%的值

时间:2011-05-04 12:35:42

标签: sql sorting sum

假设我有一张这样的表:

A B 3
 C D 1
 E F 2
 G H 4

最后一列的总和是10,我希望最大值总和至少占总值的60%。所以,在这种情况下,它将返回

G H 4
 A B 3

它上升到70%,但如果只选择第一个值,它将只上升到40%。即使可能会有一个组合将返回60%,我们希望获得最大的数字。

所以,我想我知道如何将值从大到小排序以及如何总结所有值,但我不知道如何只采用总计达60%的行。

2 个答案:

答案 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)