2011-05-12 2 views
0

에 그룹화 된 열을 요약하는 방법레일 3/AREL에 AREL

Model.group(:label).sum(:value) 내가 Model.group(:label).map(&:value).sum입니다

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

일의 AREL 방법을 찾기 위해 노력하고

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

할 것 루비를 사용하여 합계를 구하는 방법 SQL/AREL에서이 작업을 수행하는 방법

답변

1

확실하지 않습니다. 핵심 SQL이 유효하지 않습니다.

선택 항목에 집계 함수 (예 : 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 
+0

어떻게 'value_sum'에 액세스합니까? 'relation.first.value_sum'을하려고 할 때'value_sum'에 대해'NoMethodError : undefined method'를 얻습니다. – davemyron