我的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应用程序中?
谢谢您的帮助。
答案 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