首页 > 解决方案 > 如何确定每个用户的平均笔记数?

问题描述

我的 MySQL 数据库中有以下两个表:

User (id, created_at, ...)
Note (id, created_at, ...)

我希望对我的数据库做的是生成这样的报告:

Users created X weeks ago | X of users | average number of notes
1 | 20 | 2
2 | 31 | 3
3 |  5 | 4

最后一行示例... 3 周前,仅在该周范围内创建了 5 个用户,他们平均创建了总共 4 个笔记。

每行选择的用户基于该周范围......并且平均笔记数适用于任何时间范围内的用户......

这可以用 SQL 来完成,还是很复杂,我需要将它构建到我的 Rails 应用程序中?

感谢您的帮助。

标签: sqldatabasemariadb

解决方案


你会做这样的事情:

select floor(datediff(u.created_at, curdate()) / 7) as weeks_ago,
       count(distinct u.id) as numusers, 
       count(n.id) / count(distinct u.id) as avg_notes
from users u left join
     notes n
     on u.id = n.id
group by weeks_ago;

此查询中的主要警告是您如何定义“几周前”。这只需要天数并除以 7。


推荐阅读