首页 > 解决方案 > PostgreSQL 每月平均参加活动的人数

问题描述

我正在尝试编写一些 SQL 来了解每月平均参加的活动数量。

与会者

| id | user_id | event_id | created_at |

我试过了:

SELECT AVG(b.rcount) FROM (select count(*) as rcount FROM attendees GROUP BY attendees.user_id) as b;

但这会返回 5.77(这只是所有时间的平均值)。我试图获得每月的平均值。

理想的结果是:

2020-01-01, 2.1
2020-01-02, 2.4
2020-01-03, 3.3
...

我也试过这个:

SELECT mnth, AVG(b.rcount) FROM (select date_trunc('month', created_at) as mnth, count(*) as rcount FROM attendees GROUP BY 1, 2) as b;

但得到:ERROR: aggregate functions are not allowed in GROUP BY

标签: sqlpostgresqlcountaveragedistinct

解决方案


如果我没听错的话,一个简单的方法是将每月的行数除以不同的用户数:

select
    date_trunc('month', created_at) created_month,
    1.0 * count(*) / count(distinct user_id) avg_events_per_user
from attendees
group by date_trunc('month', created_at)

推荐阅读