как выбрать значения, которые составляют до 60% от общего - PullRequest
4 голосов
/ 04 мая 2011

предположим, у меня есть таблица такого типа:

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

Сумма последнего столбца равна 10, и я хочу, чтобы самые большие значения составляли не менее 60% от общего значения. Таким образом, в этом случае он вернет

G H 4
A B 3

Увеличивается до 70%, но если было выбрано только 1-е значение, оно возрастает только до 40%. Даже при том, что может быть комбинация, которая вернет ровно 60%, мы хотим взять самые большие числа.

Итак, я думаю, что знаю, как отсортировать значения от наибольшего к наименьшему и как суммировать все значения, но я не знаю, как тогда брать только строки, которые суммируют до 60%.

Ответы [ 2 ]

4 голосов
/ 04 мая 2011
--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;
3 голосов
/ 04 мая 2011

Я думаю, что это дает вам правильный результат.Нужно работать с временной таблицей, но не уверен, что этого можно избежать.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...