【问题标题】:Averaging Count For Unique Dates Separately分别计算唯一日期的平均数
【发布时间】:2014-06-25 14:24:56
【问题描述】:

我试图找出用户进入办公室的平均次数。对于来到办公室的独特用户,我有一个与下面类似的场景。我的数据库有用户每次来办公室的数据。

请注意:每个人都有不同的名字,因为我用的不是他们的名字,而是某种 ID。

Date         Person   Action
01-01-2014   John     Enter
01-01-2014   lilly    Enter
01-01-2014   lilly    Enter
01-01-2014   bill     Enter
01-02-2014   bill     Enter
01-02-2014   lilly    Enter
01-02-2014   bill     Enter
01-02-2014   John     Enter
01-02-2014   John     Enter

我可以通过将用户分组在一起并在计数上运行平均值来进行查询以给出平均值,但它仅在我在查询中指定日期时才有效。我正在尝试做一个查询,分别计算每个日期的平均值,并给我每个日期的平均值。

SELECT AVG(sub.count1)
FROM (
SELECT COUNT(*) AS count1, Date AS date1, user  FROM table1 WHERE         
date='01-01-2014' GROUP BY user
) AS sub

我想要的结果

Date         Avgcount
01-01-2014   1.33
01-02-2014   1.667

感谢您的帮助。

【问题讨论】:

    标签: mysql date count average


    【解决方案1】:

    所以您想要每人每天的平均条目数...是吗?换句话说,条目总数除以这些条目的总人数,对吗?

    = # 个条目 / # 个制作这些条目的人

    是吗?

    如果是这样,以下应该可以解决问题:

    SELECT COUNT(*)/COUNT(DISTINCT person) 
    FROM table1
    GROUP BY date
    ORDER BY date ASC;
    

    count(*) 将显示每天的条目数。如果您的表包含除“Entry”操作之外的任何内容,则需要添加一个 where 子句,其中显示 WHERE action = “Enter”。但除此之外,我们只取条目总数,除以制作这些条目的不同人数,按日期汇总,然后按 ASC 顺序排列。

    【讨论】:

    • 非常感谢,这正是我想要的。没想到这么简单。
    【解决方案2】:

    我想这就是你想要的,至少是你想要的结果:

    SELECT date1, AVG(sub.count1)
    FROM (
    SELECT COUNT(*) AS count1, Date AS date1, user  FROM table1
    GROUP BY date1, user
    ) AS sub
    GROUP BY date1
    

    【讨论】:

    • 我认为这个结果与简单地计算条目数并除以唯一人数....并避免子查询有什么不同。你能想出一个反例,其中每个用户每日条目的平均值与条目总数除以创建它们的唯一人员的比值不同吗?
    • 不,evanv 的答案更好,因为它更简单。
    猜你喜欢
    • 2016-06-06
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    相关资源
    最近更新 更多