![](/img/trans.png)
[英]SQL Query - Count number of records where SUM is greater than current record
[英]get certain record while sum of previous records greater than a pecentage in SQL Server
表:FooData
ID Count 1 54 2 42 3 33 4 25 5 16 6 9 8 5 9 3 10 2
我想獲取Count列的總和大於某個百分比(如90)的記錄。
對於此示例,所有記錄的總和為189,其中90%為170.1,我們可以看到ID 1到6的總和為179,並且它大於170.1,因此應返回記錄ID 6。
順便說一句,臨時表是不允許的,因為我需要在函數中執行它。
三角形聯接的另一個版本。
declare @T table(ID int primary key, [Count] int)
insert into @T values (1, 54), (2, 42), (3, 33),(4, 25), (5, 16), (6, 9), (8, 5), (9, 3),(10, 2)
;with R(ID, [Count], Running) as
(
select T1.ID,
T1.[Count],
cast(T3.[Count] as float)
from @T as T1
cross apply (select sum(T2.[Count])
from @T as T2
where T1.ID >= T2.ID) as T3([Count])
),
T(Total) as
(
select sum([Count])
from @T
)
select top 1 R.ID, R.[Count], R.Running
from R
inner join T
on R.Running / T.Total > 0.9
order by R.ID
嘗試這個:
SELECT TOP 1
t2.id,
SUM(t1.value) AS runningTotal
FROM FooData t1
INNER JOIN FooData t2
ON t1.id <= t2.id
GROUP BY t2.id
HAVING SUM(t1.value) * 100. /
(SELECT SUM(value) FROM @FooData) > 90
ORDER BY SUM(t1.value)
但也要注意運行總計中三角形連接的潛在性能問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.