如何获取平均每天的动作次数
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 展示了如何一步完成。我建议你使用并接受他的回答。
原回答:
两步:
- 每天按 ID 计算条目数
- 取每天的平均计数
查询:
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)
我写了 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 展示了如何一步完成。我建议你使用并接受他的回答。
原回答:
两步:
- 每天按 ID 计算条目数
- 取每天的平均计数
查询:
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)