gpt4 book ai didi

SQL累进和

转载 作者:行者123 更新时间:2023-12-02 22:22:47 25 4
gpt4 key购买 nike

我有下表:

CREATE TABLE tbl_proc(
[proc] float,
subscriber bigint
)

数据:

proc | subscriber
-----|-----------
0.7 | 123456
0.5 | 1234567
0.3 | 12345
0.3 | 45678
0.3 | 1234
0.2 | 123455
0.1 | 894562

我想找到一个很好的方法来向表中添加一个新列来表示上述值的总和。

结果:

proc | subscriber | col3
-----|------------|------------
0.7 | 123456 | 0.7
0.5 | 1234567 | 1.2 -- 0.7 + proc
0.3 | 12345 | 1.5
...

我发现了以下方法:

Select a.[proc],SUM(b.[proc])
from tbl_proc a, tbl_proc b
where a.[proc] <= b.[proc] and (a.[proc] <> b.[proc] or a.subscriber >= b.subscriber)
group by a.[proc],a.subscriber
order by a.[proc] desc

在我的表中,数据按过程降序排序。订阅者列也是唯一的。

我发现这个方法有点太贵了(我的 table 很大)。由于性能原因,我没有考虑类似光标的解决方案。

有什么建议吗?

<小时/>

更新:

我在谷歌上进一步搜索了这个问题,并在此页面上找到了“更新到局部变量”解决方案:

http://geekswithblogs.net/Rhames/archive/2008/10/28/calculating-running-totals-in-sql-server-2005---the-optimal.aspx

据我测试,这被证明是迄今为止最好的解决方案。

声明@runningTotal float = 0

更新tbl_procSET @RunningTotal = new_col = @RunningTotal + [proc]来自 tbl_proc

最佳答案

这通常称为计算运行总计。

有一种非常快速的方法可以完成您想做的事情,称为“quirky update”,但它依赖于未记录的行为。

除此之外,游标是处理大型集合的最快方法,因为这些集合的工作负载呈线性增长,而三角连接工作负载呈指数增长(直到下一个版本和 the improved OVER clause )。

参见this document作者:Itzik Ben Gan,了解有关该问题的更多信息。

关于SQL累进和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7321464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com