如何获取平均每天的动作次数

How to get the average of the number of actions per day

我写了 sql 查询:

SELECT id
       date_diff("day", create_date, date) as day
       action_type
FROM "my_database"

它带来了这个:

id     day      action_type
1       0        upload     
1       0        upload 
1       0        upload 
1       1        upload 
1       1        upload 
2       0        upload 
2       0        upload 
2       1        upload 

如何更改我的查询以获得 table 在列 day 中具有唯一天数和所有 ID 中的平均“上传”数 action_type。所以想要的结果必须是这样的:

day     avg_num_action
0        2.5 
1        1.5

它是 2.5,因为 (3+2)/2(id:1 上传 3 次,id:2 上传 2 次)。 1.5

相同

更新: 我认为我的两步法比需要的更复杂。 Rahul Biswas 展示了如何一步完成。我建议你使用并接受他的回答。


原回答:

两步:

  1. 每天按 ID 计算条目数
  2. 取每天的平均计数

查询:

with rows as (select id, date_diff('day', create_date, date) as day from mytable)
, per_id_and_day as (select id, day, count(*) as cnt from rows group by id, day)
select day, avg(cnt)
from per_id_and_day
group by day
order by day;

请试试这个。将您给定的查询视为 table。如果需要任何 WHERE 条件,请启用此其他明智的禁用 where 子句。

SELECT t.day
     , COUNT(*) / COUNT(DISTINCT t.id) avg_num_action
FROM (SELECT id,
            date_diff("day", create_date, date) as day,
            action_type
      FROM "my_database") t
WHERE t.action_type = 'upload'
GROUP BY t.day

根据给定的结果集创建一个 table 并根据它编写查询。

SELECT t.tday
     , COUNT(*) / COUNT(DISTINCT t.id) avg_num_action
FROM my_database t
GROUP BY t.tday

请检查 url https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=871935ea2b919c4e24eb83fcbce78973

您不需要此逻辑的子查询:

SELECT date_diff("day", create_date, date) as day,
       COUNT(*) * 1.0 / COUNT(DISTINCT id)
FROM "my_database"
GROUP BY date_diff("day", create_date, date)