I want to have a cumulative sum but my condition needs to group by multiple columns
table: customer
type | week | id |
---|---|---|
A | 2022-01 | abc123 |
B | 2022-01 | bcd123 |
B | 2022-02 | efg123 |
A | 2022-02 | klc123 |
B | 2022-02 | mad123 |
My query now:
SELECT week, type, SUM(cnt) OVER (ORDER BY week)
FROM (SELECT week, type, COUNT(*) AS cnt
FROM customer
GROUP BY week, type) t
ORDER BY 1 ASC
and the results:
week | type | Sum |
---|---|---|
2022-01 | A | 1 |
2022-01 | B | 1 |
2022-02 | A | 1 |
2022-02 | B | 1 |
issue is here, the last row of the result should be Sum=2, but for some reason (idk why) it follow the above.
Is it other ways to solve and calculate cumulative?
Thank you
CodePudding user response:
SELECT week, type,
SUM(cnt) OVER (PARTITION BY week, type
ORDER BY week
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
)
FROM (SELECT week, type, COUNT(*) AS cnt
FROM customer
GROUP BY week, type) t
ORDER BY 1 ASC
Sentence "ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW" you can use or not, because it's default behavior.