4 Stimmen

wie man Werte auswählt, die in der Summe 60% der Gesamtsumme ausmachen

Nehmen wir an, ich habe eine solche Tabelle:

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

Die Summe der letzten Spalte ist 10, und ich möchte die größten Werte, die mindestens 60 % des Gesamtwerts ausmachen. In diesem Fall wird also Folgendes zurückgegeben

G H 4
A B 3

Er geht bis zu 70%, aber wenn nur der 1. Wert ausgewählt wurde, geht er nur bis zu 40%. Auch wenn es eine Kombination geben könnte, die genau 60 % ergibt, wollen wir die größten Zahlen nehmen.

Ich glaube, ich weiß, wie ich die Werte vom größten zum kleinsten sortieren kann und wie ich alle Werte zusammenzählen kann, aber ich weiß nicht, wie ich dann nur die Zeilen nehmen kann, die in der Summe 60% ergeben.

4voto

bpgergo Punkte 15135
--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;

3voto

jeroenh Punkte 25392

Ich denke, damit erhalten Sie das richtige Ergebnis. Müssen Sie mit einer temporären Tabelle arbeiten, obwohl, nicht sicher, ob dies vermieden werden kann.

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)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X