如何确定每个用户的平均笔记数?

时间:2018-07-28 00:29:35

标签: sql database mariadb

我的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应用程序中?

谢谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您将执行以下操作:

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。

答案 1 :(得分:0)

解决方案1:-单个查询

这可以在MySql中完成,但是如果构建和索引不正确,您可能需要考虑查询的性能

解决方案2:多个查询(下面的算法)

每周循环
1)查询1-获取该周创建的所有用户ID。 MySql中的Interval可能有用。
2)使用这些用户ID根据用户ID和created_at

获取注释数