运行 总和给出不同的结果
Running Sum gving Different results
这是我的 table:
cust_id
order_id
order_date
total_value
运行 总计
我的总数
1
2
2021 年 7 月 20 日
100
100
300
1
3
2021 年 7 月 21 日
200
300
300
我的问题:我正在尝试计算 运行 总数:
mytotal = sum(total_value)(order by order_date)
running total = sum(total_value)(order by order_id)
为什么 mytotal
返回一个常量值而不是与 runningtotal
相同的值?造成这种差异的原因是什么?
如下所示将 OVER 子句与 SUM 结合使用。
SELECT
cust_id,
SUM (total_value) OVER (ORDER BY cust_id) AS runningTotal,
FROM orders
你一定是做错了什么。看下面:
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
order_date
total_value
mytotal
running_total
1
2
2021-07-20
100
100
100
1
3
2021-07-21
200
300
300
如您所见,mytotal 和 running_total 相同。
为了进一步帮助您,请向我们展示您在做什么。为此,请像我为您所做的那样提供 table 创建和插入数据语句,以及您正在使用的确切代码,或者至少是一个复制您的问题的简化版本。请注意,您的代码中的表达式缺少 OVER
.
您需要添加ROWS UNBOUNDED PRECEDING
.
默认的 window 是 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)
这是我的 table:
cust_id | order_id | order_date | total_value | 运行 总计 | 我的总数 |
---|---|---|---|---|---|
1 | 2 | 2021 年 7 月 20 日 | 100 | 100 | 300 |
1 | 3 | 2021 年 7 月 21 日 | 200 | 300 | 300 |
我的问题:我正在尝试计算 运行 总数:
mytotal = sum(total_value)(order by order_date)
running total = sum(total_value)(order by order_id)
为什么 mytotal
返回一个常量值而不是与 runningtotal
相同的值?造成这种差异的原因是什么?
如下所示将 OVER 子句与 SUM 结合使用。
SELECT
cust_id,
SUM (total_value) OVER (ORDER BY cust_id) AS runningTotal,
FROM orders
你一定是做错了什么。看下面:
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 | order_date | total_value | mytotal | running_total |
---|---|---|---|---|---|
1 | 2 | 2021-07-20 | 100 | 100 | 100 |
1 | 3 | 2021-07-21 | 200 | 300 | 300 |
如您所见,mytotal 和 running_total 相同。
为了进一步帮助您,请向我们展示您在做什么。为此,请像我为您所做的那样提供 table 创建和插入数据语句,以及您正在使用的确切代码,或者至少是一个复制您的问题的简化版本。请注意,您的代码中的表达式缺少 OVER
.
您需要添加ROWS UNBOUNDED PRECEDING
.
默认的 window 是 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)