Rails含group分组的查询如何对total列求和得到单一数值
问题原因
查询中包含GROUP BY子句时,ActiveRecord的聚合方法(如sum)会默认按分组维度返回每个分组对应的聚合结果哈希,不会直接返回全局总和。以下是两种可行的解决方案:
解决方案
Ruby层聚合(推荐用于同时需要渲染查询结果列表的场景)
若你已经需要加载@payroll_employees的全部记录渲染列表,直接用Ruby层遍历求和即可,不会产生额外数据库查询:@sum_total = @payroll_employees.sum(&:total)SQL层聚合(推荐用于仅需要总和、不需要加载全部记录的场景)
将原带分组的查询作为子查询,在外层做全局求和,由数据库直接返回单个数值,执行效率更高:@sum_total = PayrollEmployee.from(@payroll_employees, :subquery).sum(:total)
两种方案均可得到你需要的单值总和,可根据实际业务场景选择。
内容的提问来源于stack exchange,提问作者jeff
相关产品推荐
相关产品推荐

