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

如何用ActiveRecord分组计算选手总分?ActiveAdmin场景求助

解决ActiveRecord GROUP BY报错并统计选手总分

正确的ActiveRecord查询语句

方式一(返回ActiveRecord关系对象,适配ActiveAdmin scoped_collection)

Competiton.select('contestant_id, SUM(total) AS total').group('contestant_id')

方式二(返回哈希,适合快速获取结果,无需ActiveRecord对象时可使用)

Competiton.group(:contestant_id).sum(:total)

错误原因解释

你之前的查询报错是因为ActiveRecord默认会尝试加载表的所有字段(包括id),但遵循SQL标准的数据库要求:GROUP BY子句之外的字段,要么被聚合函数包裹,要么必须出现在GROUP BY中。由于id字段既不在GROUP BY里也未被聚合,因此触发了报错。

通过明确指定select仅包含contestant_id和聚合后的SUM(total),就能避免默认加载其他无关字段,解决这个问题。

在ActiveAdmin scoped_collection中的使用示例

ActiveAdmin.register Competiton do
  # 定义自定义scope
  scope :aggregated_total_scores, default: false do
    Competiton.select('contestant_id, SUM(total) AS total').group('contestant_id')
  end
end

验证结果

执行上述查询后,会得到符合你期望的结果:

contestant_idtotal
124
210
38

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:32:14