如何选择总结到的总
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 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