You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Rails及Groupdate gem统计每月发布超X个视频的用户数?

统计每月发布超过X个视频的用户数量(Rails + Groupdate)

方法一:内存中处理(适合小数据量)

先获取每个用户每月的视频发布数,再筛选出符合条件的用户并统计数量:

# 设定阈值X,替换为你需要的数值
x = 2

# 按月份和用户分组,统计每个用户当月的视频数
user_monthly_video_counts = Video.group_by_month(:created_at).group(:user_id).count

# 遍历每个月份,统计视频数超过X的用户数量
result = user_monthly_video_counts.transform_values do |user_counts|
  user_counts.count { |_, count| count > x }
end

返回结果格式和你原代码的输出一致,示例:

{ Mon, 01 Aug 2022=>80, Thu, 01 Sep 2022=>75, Sat, 01 Oct 2022=>78, ... }

方法二:数据库层面过滤(适合大数据量,性能更优)

通过子查询在数据库中直接筛选出每月发布视频数超过X的用户,再按月份统计数量,避免把大量数据加载到内存:

x = 2

result = Video
  # 先按月份和用户分组,筛选出视频数超过X的记录
  .group_by_month(:created_at)
  .group(:user_id)
  .having("COUNT(*) > ?", x)
  # 再按月份分组,统计符合条件的用户数
  .group_by_month(:created_at)
  .count("DISTINCT user_id")

也可以用更清晰的子查询写法:

x = 2

# 子查询:获取每月发布视频数超过X的用户及对应月份
qualified_user_months = Video
  .select("DATE_TRUNC('month', created_at) as month, user_id")
  .group(:month, :user_id)
  .having("COUNT(*) > ?", x)

# 按月份统计符合条件的用户数量
result = qualified_user_months
  .group_by_month(:month)
  .count("DISTINCT user_id")

说明

  • 两种方法都能输出你需要的按月分组统计结果,格式与原代码返回的一致。
  • 方法二更适合数据量大的场景,所有过滤逻辑在数据库完成,能有效减少内存占用和数据传输开销。
  • 你可以根据需求自由调整x的数值,比如设为3就是统计每月发布超过3个视频的用户。

内容的提问来源于stack exchange,提问作者Dan Weaver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:15:49