如何修改SQL查询以计算每日所有id的upload操作平均次数
解决方法
实现思路
要得到目标结果需要两次聚合计算:
- 第一次聚合:按
day和id分组,统计每个用户每日的upload操作次数 - 第二次聚合:按
day分组,对当日所有用户的操作次数求平均值
调整后的SQL语句
CTE写法(适配支持通用表表达式的SQL环境)
WITH user_daily_action AS ( -- 统计每个id每天的upload操作次数 SELECT id, date_diff("day", create_date, date) as day, COUNT(*) as action_count FROM "my_database" WHERE action_type = 'upload' -- 过滤仅保留upload类型操作 GROUP BY id, date_diff("day", create_date, date) ) -- 按天计算所有用户操作次数的平均值 SELECT day, AVG(action_count) as avg_num_action FROM user_daily_action GROUP BY day ORDER BY day;
子查询写法(兼容所有SQL环境)
SELECT day, AVG(action_count) as avg_num_action FROM ( SELECT id, date_diff("day", create_date, date) as day, COUNT(*) as action_count FROM "my_database" WHERE action_type = 'upload' GROUP BY id, date_diff("day", create_date, date) ) t GROUP BY day ORDER BY day;
结果验证
- day=0时,内层统计得到id1操作次数为3、id2操作次数为2,平均值为(3+2)/2=2.5,和预期一致
- day=1时,内层统计得到id1操作次数为2、id2操作次数为1,平均值为(2+1)/2=1.5,和预期一致
内容的提问来源于stack exchange,提问作者user13467695
相关产品推荐
相关产品推荐

