gpt4 book ai didi

sql-server - 在 MSSQL 中使用 OVER PARTITION 时 SUM 不一致

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

在静态表上,我尝试在 SSMS 中运行以下查询(以获取每个用户的最新交易并对美元值(value)求和):

SELECT
SUM(nMoney) As TotalMoney
FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY nGroup, nUser ORDER BY dTransaction DESC) AS SEQNUM
, nMoney
FROM [MyDB].[dbo].[MyTable]
) MySubquery
WHERE MySubquery.SEQNUM=1

这是一个包含 2,701,510 行的表,nMoney 列的类型为 Decimal(12,2)。当我多次运行它时,我得到不同的结果:

2317367341.75
2317370443.45
2317449819.62
2317360649.43
2317449819.62

什么可能导致结果不一致?

最佳答案

对于浮点运算,数字相加的顺序可以 affect the result .

但在本例中,您使用的是精确的 Decimal(12,2)

问题在于,对于 nGroup、nUser、dTransaction 的重复值,ROW_NUMBER 不是确定性的,因此不同的运行可能会返回不同的结果。

要获得确定性行为,您可以将保证唯一的列添加到 ORDER BY 的末尾以充当平局断路器。

关于sql-server - 在 MSSQL 中使用 OVER PARTITION 时 SUM 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18499165/

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