2016-03-04 86 views
0

我需要一个表格,其中包含每个产品和月份的GP总和以及此产品GP的总运行总和。虽然我已经为此找到了一个walkaroud,但这真让我困惑,我希望在这里能够提示一下。在Amazon Redshift中使用窗口函数时需要使用GROUP BY聚合

在红移,当我尝试使用窗口SUM这样的:

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”需要在GROUP BY语句,但是,这并不为我工作。我已经发现的唯一walkaroud是嵌套另一个聚合函数,这似乎很好地工作 - 在这种情况下,至少:

SUM(SUM("gp")) OVER (PARTITION BY p."productID" ORDER BY "month" ROWS 

Cound谁能解释这吗?

谢谢,托马斯

回答

0
SELECT "productID", "month", SUM("gp") AS "gp_sum" 
FROM "products" 
GROUP BY "productID", "month" 

这确实SUMproductIDmonth。您的窗口函数通过productID计算SUM。 SQL仍然需要“规则”如何通过productIDmonth(group by)来计算gp_runsum

您的解决方案(SUM(SUM(...)))应该可以工作,但您可以始终使用单独的sql计算运行总和,然后加入productID

相关问题