2016-03-04 71 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

相關問題