I am trying to calculate the percent growth of a single column (COUNT column) as shown below:
DATE COUNT 2017-05-22 20 2017-05-29 42 2017-06-05 123 2017-06-12 21 2017-06-19 535 2017-06-26 3236 2017-07-03 32133
The following here is the desired output with a Percent Growth Column taking into consideration the weekly change of the middle COUNT column:
DATE COUNT Perc Growth 2017-05-22 20 2017-05-29 42 110.00% 2017-06-05 123 192.86% 2017-06-12 21 -82.93% 2017-06-19 535 2447.62% 2017-06-26 3236 504.86% 2017-07-03 32133 892.99%
When i did the following line of SQL, this did not give me the correct values for the percent growth! Any advice?
SELECT DATE_TRUNC(WEEK, t.DATE_CREATED) as DATE_CREATED,
COUNT(t.COUNT) as COUNT_SIGN_UPS,
100 * ( COUNT(*) - LAG(COUNT(*), 1) OVER (order by DATE_CREATED / LAG(COUNT(*), 1) over (order by DATE_CREATED)) || '%') as percent_growth
FROM data t
GROUP BY 1
ORDER BY 1 ASC;
Advertisement
Answer
how about using a sub query:
select DATE_CREATED
,COUNT_SIGN_UPS
, ((COUNT_SIGN_UPS /LAG(COUNT_SIGN_UPS,1,COUNT_SIGN_UPS) OVER (order by DATE_CREATED) - 1) * 100.0 as percent_growth
from (
SELECT DATE_TRUNC(WEEK, t.DATE_CREATED) as DATE_CREATED,
COUNT(t.COUNT) as COUNT_SIGN_UPS
FROM data t
GROUP BY 1
ORDER BY 1 ASC;
) t