Как сложить сгруппированный столбец в AREL - PullRequest
0 голосов
/ 12 мая 2011

в 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)

, который Model.group(:label).map(&:value).sum используя ruby ​​для суммирования, как мне сделать это в SQL / AREL

1 Ответ

1 голос
/ 05 июля 2011

Не уверен, что это имеет смысл.Ваш основной SQL недопустим:

SELECT value, label FROM model_table GROUP BY label

Вы не можете иметь GROUP BY без функции агрегирования (например, SUM) в вашем выборе.Я думаю, что вы действительно хотите это:

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 
...