[英]Postgresql how do I aggregate the data in a table to produce a summarized table with unique values in a range
所以,我是新來的postgresql,我的數據如下:
PRODUCT WKnum SALES
HAMMER 1 17
HAMMER 2 20
HAMMER 3 17
HAMMER 4 10
HAMMER 5 12
HAMMER 6 13
HAMMER 7 2
HAMMER 8 25
SINK 1 25
SINK 2 20
SINK 3 9
SINK 4 7
SINK 5 24
SINK 6 16
SINK 7 10
SINK 8 16
BUCKET 1 22
BUCKET 2 2
BUCKET 3 10
BUCKET 4 24
BUCKET 5 9
BUCKET 6 20
BUCKET 7 9
BUCKET 8 21
然后我想要如下結果:
PRODUCT BEST_CONSEC_4WEEKS BEST_CONSEC_4WEEKS_SLS
HAMMER 1-4 64
SINK 5-8 66
BUCKET 3-6 63
其中“BEST_CONSEC_4WEEKS”是一個字符串,表示連續 4 周內銷售額最高的實際周數。 而“BEST_CONSEC_4WEEKS_SLS”提供了該產品在上述指定的幾周內售出的總單位數。 必須避免特定於數據庫的函數。
下面的一段代碼是我的嘗試,但它沒有像我預期的那樣工作。
SELECT PRODUCT,
CASE WHEN Wknum IN ‘1 - 4’:: INTETER AS BEST_CONSEC_4WEEKS,
SUM (CASE WHEN Wknum IS BETWEEN ‘1 AND 4’::INTEGER THEN SALES ELSE 0 END) OR
SUM (CASE WHEN Wknum IS BETWEEN ‘5 AND 8’::INTEGER THEN SALES ELSE 0 END)
SUM (CASE WHEN Wknum IS BETWEEN ‘3 AND 6’::INTEGER THEN SALES ELSE 0 END) AS BEST_CONSEC_4WEEKS_SLS
FROM TABLE1
誰能告訴我我做錯了什么? 謝謝
您可以使用帶有框架的 window 函數,如下所示:
with u as
(select PRODUCT,
WKnum,
sum(SALES) over(partition by PRODUCT order by WKnum rows between current row and 3 following) as BEST_CONSEC_4WEEKS_SLS
from TABLE1),
v as
(select *, rank() over(partition by PRODUCT order by BEST_CONSEC_4WEEKS_SLS desc) as r
from u)
select PRODUCT,
concat(wknum, '-', wknum + 3) as BEST_CONSEC_4WEEKS,
BEST_CONSEC_4WEEKS_SLS
from v where r = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.