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

Rails中distinct.sum返回错误值问题求助

问题原因及解决方法

环境

  • ruby: 3.1.2p20
  • rails: 7.0.7.2

问题分析

你执行的代码结果不符合预期,核心原因是Rails对distinct和sum的组合逻辑导致的:

当链式调用这两个方法时,Rails会将distinct作用于求和的字段(value),生成的SQL是:

SELECT SUM(DISTINCT "test_models"."value") FROM "test_models" WHERE "test_models"."id" IN (0, 1)

这条SQL的作用是计算所有不同value值的总和,而非先对查询到的行去重再求和。因为你两条记录的value都是10.0,去重后只剩一个值,所以求和结果就是10.0。

解决方法

根据需求选择对应的写法:

  • 如果要计算所有符合条件记录的value总和(不管value是否重复),直接去掉distinct即可:
    TestModel.where(id: [0,1]).sum(:value)
    
  • 如果确实需要先对行去重(比如存在重复行的场景)再求和,先获取去重后的value集合再计算:
    TestModel.where(id: [0,1]).distinct.pluck(:value).sum
    

内容的提问来源于stack exchange,提问作者0lli.rocks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 22:41:13