如何在AREL中对分组列进行求和

时间:2011-05-12 01:15:24

标签: sql ruby-on-rails-3 arel

在Rails 3 / AREL中

Model.group(:label).sum(:value)会做

SELECT sum(value), label from model_table group by label

我想找到AREL的做法

SELECT sum(value) from (select value, label from model_table group by label)

使用ruby求Model.group(:label).map(&:value).sum求和,如何在SQL / AREL中执行此操作

1 个答案:

答案 0 :(得分:1)

不确定这是否有意义。您的核心SQL无效:

SELECT value, label FROM model_table GROUP BY label

如果您的选择中没有聚合函数(例如SUM),则不能拥有GROUP BY。我想你真正想要的是:

SELECT label, SUM(value) from model_table GROUP BY label

我是对的吗?要在AREL中执行此操作,请尝试以下操作:

relation = Model.select(:label).
  select(Model.arel_table[:value].sum.as("value_sum")).
  group(:label)
relation.to_sql
# => SELECT label, SUM("model_table"."impressions") AS value_sum FROM "model_table" GROUP BY label