代码之家  ›  专栏  ›  技术社区  ›  AnnaSm

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

  •  0
  • AnnaSm  · 技术社区  · 8 年前

    我的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 回复  |  直到 8 年前
        1
  •  2
  •   Gordon Linoff    8 年前

    你可以这样做:

    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。

        2
  •  0
  •   Shubham    8 年前

    解决方案1:—单个查询

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

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

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