运行 总计和子组
Running total with subgroups
我试图通过查询现有视图来获得 运行 总数,但我首先需要精确的分组。我知道我可以使用 Sum(xx) over (Partition by xx Order by xx) 来做 运行 总数,但我只知道如何在简单的情况下使用它。
运行 视图时的数据如下所示(有一些无用的额外列),除了没有 Running_Stock 列,这是我想要得到的:
+---------+----------+---------+------------+-------+---------+---------------+
| Product | Version | Country | Week | sales | returns | Running_stock |
+---------+----------+---------+------------+-------+---------+---------------+
| Pdt1 | pdt1ver1 | Aus | 2020M01W01 | 10 | 3 | 7 |
| pdt1 | pdt1ver1 | Fra | 2020M01W01 | 8 | 2 | 6 |
| pdt1 | pdt1ver1 | Fra | 2020M01W02 | 15 | 5 | 16 |
| pdt1 | pdt1ver2 | UK | 2020M01W01 | 20 | 5 | 15 |
| pdt1 | pdt1ver2 | UK | 2020M01W02 | 15 | 1 | 29 |
| pdt1 | pdt1ver2 | UK | 2020M01w03 | 9 | 0 | 38 |
| pdt2 | pdt2ver1 | Fra | 2020M01W01 | 5 | 1 | 4 |
| pdt2 | pdt2ver1 | Fra | 2020M01W02 | 3 | 0 | 7 |
+---------+----------+---------+------------+-------+---------+---------------+
对于给定国家/地区的每个产品版本,我应该能够在任何时间点获得 running_stock。库存是通过 "sales - returns".
计算的
我天真地以为我可以做一个简单的:
Select Product, Version, Country, Week, Sales, Returns,
Sum(sales-returns) over(partition by Version, Country Order by Week) Running_stock
from MyView
但我得到的只是每个“组”,每一行都有相同的 运行 股票,而且它甚至不是正确的总和(实际上是总和 * 2)。
您很接近,但您当前的查询正在对每个组中的所有行执行 SUM
。您只需要为您的累计总和添加一个行规范:
Sum(sales-returns) over(
partition by Version, Country
Order by Week
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW -- all rows including current row
) Running_stock
我试图通过查询现有视图来获得 运行 总数,但我首先需要精确的分组。我知道我可以使用 Sum(xx) over (Partition by xx Order by xx) 来做 运行 总数,但我只知道如何在简单的情况下使用它。
运行 视图时的数据如下所示(有一些无用的额外列),除了没有 Running_Stock 列,这是我想要得到的:
+---------+----------+---------+------------+-------+---------+---------------+
| Product | Version | Country | Week | sales | returns | Running_stock |
+---------+----------+---------+------------+-------+---------+---------------+
| Pdt1 | pdt1ver1 | Aus | 2020M01W01 | 10 | 3 | 7 |
| pdt1 | pdt1ver1 | Fra | 2020M01W01 | 8 | 2 | 6 |
| pdt1 | pdt1ver1 | Fra | 2020M01W02 | 15 | 5 | 16 |
| pdt1 | pdt1ver2 | UK | 2020M01W01 | 20 | 5 | 15 |
| pdt1 | pdt1ver2 | UK | 2020M01W02 | 15 | 1 | 29 |
| pdt1 | pdt1ver2 | UK | 2020M01w03 | 9 | 0 | 38 |
| pdt2 | pdt2ver1 | Fra | 2020M01W01 | 5 | 1 | 4 |
| pdt2 | pdt2ver1 | Fra | 2020M01W02 | 3 | 0 | 7 |
+---------+----------+---------+------------+-------+---------+---------------+
对于给定国家/地区的每个产品版本,我应该能够在任何时间点获得 running_stock。库存是通过 "sales - returns".
计算的我天真地以为我可以做一个简单的:
Select Product, Version, Country, Week, Sales, Returns,
Sum(sales-returns) over(partition by Version, Country Order by Week) Running_stock
from MyView
但我得到的只是每个“组”,每一行都有相同的 运行 股票,而且它甚至不是正确的总和(实际上是总和 * 2)。
您很接近,但您当前的查询正在对每个组中的所有行执行 SUM
。您只需要为您的累计总和添加一个行规范:
Sum(sales-returns) over(
partition by Version, Country
Order by Week
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW -- all rows including current row
) Running_stock