如何解决运行总和给出不同的结果
这是我的桌子:
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 举报,一经查实,本站将立刻删除。