sql - 如何确定每个用户的平均笔记数?
问题描述
我的 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 应用程序中?
感谢您的帮助。
解决方案
你会做这样的事情:
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。
推荐阅读
- java - 在 ElasticSearch 版本 7 中替换 InternalSimpleValue 构造函数
- matlab - 如何从具有高斯噪声的输出中找到变换矩阵?
- python - python的配置文件
- aws-lambda - 支持从 dynamoDB 获取超过 1000 条记录
- rust - Rust 字符串与 &str 迭代器
- angular - Angular 加载数据后如何渲染页面?
- r - 基于 UNIX 时间戳的周和月的队列
- sql - 使用 width_bucket 获取结果范围
- c# - 如何以编程方式绑定 XAML 中的数据
- javascript - 重新加载页面时如何将状态保存到localStorage并再次读取?