微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

运行总和给出不同的结果

如何解决运行总和给出不同的结果

这是我的桌子:

cust_id order_id 订单日期 total_value 运行总数 mytotal
1 2 7/20/2021 100 100 300
1 3 7/21/2021 200 300 300

我的问题:我正在尝试计算运行总数:

mytotal = sum(total_value)(order by order_date)

running total = sum(total_value)(order by order_id)

为什么 mytotal 返回的是常量值而不是与 runningtotal 相同的值?造成这种差异的原因是什么?

解决方法

你一定是做错了什么。请看以下内容:

declare @test table (
    cust_id int,order_id int,order_date date,total_value int
    );

INSERT INTO @test VALUES
(1,2,'2021-07-20',100),(1,3,'2021-07-21',200);

SELECT cust_id,order_id,order_date,total_value,SUM(total_value) OVER (order by order_date) as mytotal,SUM(total_value) OVER (order by order_id) as running_total
FROM @test;
    

输出:

cust_id order_id 订单日期 total_value 我的全部 running_total
1 2 2021-07-20 100 100 100
1 3 2021-07-21 200 300 300

如您所见,mytotal 和 running_total 是相同的。

为了进一步帮助您,请向我们展示您在做什么。为此,请像我为您所做的那样提供表创建和插入数据语句,以及您正在使用的确切代码,或者至少是复制您的问题的简化版本。请注意,代码中的表达式缺少 OVER

,

您需要添加 ROWS UNBOUNDED PRECEDING

默认窗口是 RANGE UNBOUNDED PRECEDING,如果有两行具有相同的顺序(在本例中为相同的 id),它会给出错误的结果:

mytotal = sum(total_value) over (order by order_date rows unbounded preceding)
running total = sum(total_value) over (order by order_id rows unbounded preceding)
,

将 OVER 子句与 SUM 一起使用,如下所示。

SELECT 
cust_id,SUM (total_value) OVER (ORDER BY cust_id) AS runningTotal,FROM orders

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。