SQL查询:每月用户的增长百分比

SQL查询:每月用户的增长百分比,sql,postgresql,Sql,Postgresql,我有一个简单的查询,可以计算每个月的用户注册数 选择将字符(在'YYYY-MM'创建)作为月份、计数(用户id) 来自用户 按月分组 按月订购说明 我想要的是每个月与上个月相比的百分比增长。 PostgreSQL 9.1.9架构设置: create table users (created_at date, user_id int); insert into users select '20130101', 1; insert into users select '20130102', 2;

我有一个简单的查询,可以计算每个月的用户注册数

选择将字符(在'YYYY-MM'创建)作为月份、计数(用户id)
来自用户
按月分组
按月订购说明
我想要的是每个月与上个月相比的百分比增长。

PostgreSQL 9.1.9架构设置

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;
select
  month,
  UserCount,
  100 - lag(UserCount) over (order by month asc)
        * 100.0 / UserCount Growth_Percentage
from
(
  SELECT TO_CHAR(created_at, 'YYYY-MM') AS month,
         COUNT(user_id) UserCount
  FROM users
  GROUP BY month
  ORDER BY month DESC
) sq
|   MONTH | USERCOUNT | GROWTH_PERCENTAGE |
-------------------------------------------
| 2013-01 |         2 |            (null) |
| 2013-02 |         3 |   33.333333333333 |
| 2013-03 |         5 |                40 |
查询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;
select
  month,
  UserCount,
  100 - lag(UserCount) over (order by month asc)
        * 100.0 / UserCount Growth_Percentage
from
(
  SELECT TO_CHAR(created_at, 'YYYY-MM') AS month,
         COUNT(user_id) UserCount
  FROM users
  GROUP BY month
  ORDER BY month DESC
) sq
|   MONTH | USERCOUNT | GROWTH_PERCENTAGE |
-------------------------------------------
| 2013-01 |         2 |            (null) |
| 2013-02 |         3 |   33.333333333333 |
| 2013-03 |         5 |                40 |

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;
select
  month,
  UserCount,
  100 - lag(UserCount) over (order by month asc)
        * 100.0 / UserCount Growth_Percentage
from
(
  SELECT TO_CHAR(created_at, 'YYYY-MM') AS month,
         COUNT(user_id) UserCount
  FROM users
  GROUP BY month
  ORDER BY month DESC
) sq
|   MONTH | USERCOUNT | GROWTH_PERCENTAGE |
-------------------------------------------
| 2013-01 |         2 |            (null) |
| 2013-02 |         3 |   33.333333333333 |
| 2013-03 |         5 |                40 |

Clodoaldo是正确的,增长百分比应使用()


你所计算的是所谓的商业利润率或毛利润率。我想这不是OP要求的。3超过2是50%的增长,而不是33.3你绝对正确!我在考虑利润率……非常感谢!我接受了Clodoaldo Neto的回答,因为他/她是第一个,但这也是正确的答案。这真是太棒了!谢谢!