Sql 在Amazon红移中使用窗口函数时需要按聚合分组

Sql 在Amazon红移中使用窗口函数时需要按聚合分组,sql,sum,amazon-redshift,window-functions,Sql,Sum,Amazon Redshift,Window Functions,我需要一个表,其中包含每个产品和月份的GP总和,以及从那时起该产品的GP运行总和。虽然我已经找到了一个解决方法,但这确实让我感到困惑,我希望这里能给我一个提示 在红移中,当我尝试使用窗口和时,如下所示: CREATE TABLE "tmp.gp_sum" AS ( SELECT "productID", "month", SUM("gp") AS "gp_sum", SUM("gp") OVER (PARTITION BY p."productID" ORDER BY "month" ROWS

我需要一个表,其中包含每个产品和月份的GP总和,以及从那时起该产品的GP运行总和。虽然我已经找到了一个解决方法,但这确实让我感到困惑,我希望这里能给我一个提示

在红移中,当我尝试使用窗口和时,如下所示:

CREATE TABLE "tmp.gp_sum" AS (
SELECT 
"productID",
"month",
SUM("gp") AS "gp_sum",
SUM("gp") OVER (PARTITION BY p."productID" ORDER BY "month" ROWS unbounded preceding) as "gp_runsum" 
FROM "products" 
GROUP BY "productID", "month"
); 
DB返回一个错误,说“gp”需要在GROUPBY语句中,但这对我不起作用。我发现的唯一可行方法是嵌套另一个聚合函数,它似乎工作得很好-至少在本例中是这样的:

SUM(SUM("gp")) OVER (PARTITION BY p."productID" ORDER BY "month" ROWS 
有人能解释一下吗

谢谢,托马斯

SELECT "productID", "month", SUM("gp") AS "gp_sum"
FROM "products" 
GROUP BY "productID", "month"
这对
productID
月份进行
求和
。您的窗口函数通过
productID
计算
SUM
。SQL仍然需要一个“规则”来计算
gp\u runsum
by
productID
month
(分组依据)

您的解决方案(
SUM(SUM(…)
)应该可以工作,但您可以始终在单独的sql中计算运行的SUM,然后在
productID
上加入

这对
productID
月份进行
求和
。您的窗口函数通过
productID
计算
SUM
。SQL仍然需要一个“规则”来计算
gp\u runsum
by
productID
month
(分组依据)

您的解决方案(
SUM(SUM(…)
)应该可以工作,但您可以始终在单独的sql中计算运行的SUM,然后在
productID

上加入,尝试以下操作:

CREATE TABLE "tmp.gp_sum" AS
(
    SELECT   "productID",
             "month",
              SUM("gp") AS "gp_sum",
              SUM("gp") OVER (PARTITION BY p."productID" ORDER BY "month" ROWS unbounded preceding) as "gp_runsum" 
    FROM     "products" 
    GROUP BY "productID", "month", "gp"
); 
试试这个:

CREATE TABLE "tmp.gp_sum" AS
(
    SELECT   "productID",
             "month",
              SUM("gp") AS "gp_sum",
              SUM("gp") OVER (PARTITION BY p."productID" ORDER BY "month" ROWS unbounded preceding) as "gp_runsum" 
    FROM     "products" 
    GROUP BY "productID", "month", "gp"
); 

你能解释一下吗?你能解释一下吗?