Sql 如何确定每个用户的平均注释数?

Sql 如何确定每个用户的平均注释数?,sql,database,mariadb,Sql,Database,Mariadb,我的MySQL数据库中有以下两个表: User (id, created_at, ...) Note (id, created_at, ...) 我希望我的DB能生成这样的报告: Users created X weeks ago | X of users | average number of notes 1 | 20 | 2 2 | 31 | 3 3 | 5 | 4 最后一行示例。。。3周前,就在这一周内创建了5个用户,他们平均总共创建了4个便笺 其中,每行选择的用户基于该周范围。。。

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

User (id, created_at, ...)
Note (id, created_at, ...)
我希望我的DB能生成这样的报告:

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


谢谢您的帮助。

解决方案1:-单个查询

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

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

每周循环
1) 查询1-获取该周创建的所有用户标识。在MySql中可能会很有用

2) 使用这些userid可以根据userd id获取注释的数量,并在解决方案1:-单个查询中创建注释

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

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

每周循环
1) 查询1-获取该周创建的所有用户标识。在MySql中可能会很有用

2) 使用这些userid获取基于userd id的注释数量,并在

处创建。您可以执行以下操作:

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。

您可以这样做:

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。

下面的algo?这是什么意思?下面是泰尔戈?这是什么意思?什么版本的MySQL?8.0或5.x?@TheImpler MariaDB 10.2将标签固定到“MariaDB”。MySQL的哪个版本?8.0或5.x?@TheImpaler MariaDB 10.2将标记固定到“MariaDB”。嗯,这似乎并没有输出工作中的数据。。。我必须更新它,因为创建的位置不明确,数据库出错,可能是我更新不正确。@AnnaSm。所有列均应合格。我的坏消息。实际上是假警报,平均注释总是1.000。应该是n.user\u id而不是n.id吗?@AnnaSm。因为我忘记了
floor()
.hmm,它似乎没有输出工作中的数据。。。我必须更新它,因为创建的位置不明确,数据库出错,可能是我更新不正确。@AnnaSm。所有列均应合格。我的坏消息。实际上是假警报,平均注释总是1.000。应该是n.user\u id而不是n.id吗?@AnnaSm。因为我忘了
地板()