2013-05-03 2 views
2

나는 한 달에 사용자 등록 수를 계산하는이 쉬운 쿼리를 가지고 있습니다.SQL 쿼리 : 월간 사용자 증가율 (%)

SELECT TO_CHAR(created_at, 'YYYY-MM') AS month, COUNT(user_id) 
FROM users 
GROUP BY month 
ORDER BY month DESC 

내가 원하는 것은 지난 달과 비교하여 매월 증가율을 백분율로 나타낸 것입니다.

답변

6

SQL Fiddle

select 
    month, total, 
    (total::float/lag(total) over (order by month) - 1) * 100 growth 
from (
    select to_char(created_at, 'yyyy-mm') as month, count(user_id) total 
    from users 
    group by month 
) s 
order by month; 
    month | total |  growth  
---------+-------+------------------ 
2013-01 |  2 |     
2013-02 |  3 |    50 
2013-03 |  5 | 66.6666666666667 
+0

이 멋진 심각하여 계산해야한다! 고마워요! –

1

SQL Fiddle

의 PostgreSQL 9.1.9 스키마 설정 : 1

create table users (created_at date, user_id int); 
insert into users select '20130101', 1; 
insert into users select '20130102', 2; 
insert into users select '20130203', 3; 
insert into users select '20130204', 4; 
insert into users select '20130201', 5; 
insert into users select '20130302', 6; 
insert into users select '20130303', 7; 
insert into users select '20130302', 8; 
insert into users select '20130303', 9; 
insert into users select '20130303', 10; 

검색어 :

,449,

Results :

| MONTH | USERCOUNT | GROWTH_PERCENTAGE | 
------------------------------------------- 
| 2013-01 |   2 |   (null) | 
| 2013-02 |   3 | 33.333333333333 | 
| 2013-03 |   5 |    40 | 

클로도 알도 맞아, 성장 비율은 (Fiddle2)

100.0 * UserCount 
     /lag(UserCount) over (order by month asc) 
     - 100 
     AS Growth_Percentage 
+0

계산하는 것은 _commercial margin_ 또는 _gross profit margin_입니다. 나는 OP가 요구 한 것이 아닌 것 같아요. 3이 2는 50 % 성장하지 않습니다 33.3 –

+0

당신은 절대적으로 옳습니다! 이익 마진을 생각하고 있었어요. – RichardTheKiwi

+0

고마워요! 나는 Clodoaldo Neto의 대답을 받아 들였습니다. 왜냐하면 그/그녀가 처음 이었기 때문입니다. 그러나 이것은 또한 올바른 답입니다. –