60%的值假設我有這樣的一個表:如何選擇總結到的總
AB 3
CD 1
EF 2
GH 4
總和最後一列的數字是10,我想要總和最大值至少達到總價值的60%。所以,在這種情況下,它會返回
G H 4
A B 3
它上升到70%,但如果只選擇了第一個值,它只會上升到40%。儘管可能有一個組合會返回60%,但我們希望獲得最大的數字。所以,我想我知道如何將數值從大到小排序,以及如何總結所有的值,但是我不知道如何只取總和達到60%的線。
60%的值假設我有這樣的一個表:如何選擇總結到的總
AB 3
CD 1
EF 2
GH 4
總和最後一列的數字是10,我想要總和最大值至少達到總價值的60%。所以,在這種情況下,它會返回
G H 4
A B 3
它上升到70%,但如果只選擇了第一個值,它只會上升到40%。儘管可能有一個組合會返回60%,但我們希望獲得最大的數字。所以,我想我知道如何將數值從大到小排序,以及如何總結所有的值,但是我不知道如何只取總和達到60%的線。
--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;
您對保留字'table','outer'和'inner'的使用使得這個查詢非常難以閱讀。 – onedaywhen 2011-05-04 12:54:55
是的,你說得對,我已經糾正它,謝謝 – bpgergo 2011-05-04 12:57:44
我認爲它應該是'i.val <= o.val'。在線演示http://data.stackexchange.com/stackoverflow/q/99506/ – 2011-05-04 13:04:33
我想這會給你正確的結果。儘管需要使用臨時表,但不確定是否可以避免。
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)
什麼是按順序?例如,您可以通過使用CTE來避免臨時表。 – onedaywhen 2011-05-04 13:10:32
由於OP需要x最高值,所以需要order by – jeroenh 2011-05-04 13:25:12
您是對的。我應該提到:我不是SQL專家:-)。通過 – jeroenh 2011-05-04 15:24:41
這基本上是計算運行總數。這是什麼RDBMS? – 2011-05-04 12:52:39
你是否需要佔總數的百分比,或者你是否只需要一個目標數字?如果您有100個不同的值,並且您希望所有記錄的總和達到但不超過特定數量(例如453),那麼這些數值是否會起作用? – 2011-05-04 12:54:37