1

정수 열 no_of_unitsaverage_revenue_per_unit이있는 테이블이 있다고 가정 해 보겠습니다. 한 행에 대한 총 수익을 얻으려면 no_of_units * average_revenue_per_unit을 계산하면됩니다. 그러나 전체 테이블의 총 수익을 계산하려면 어떻게해야합니까?ActiveRecord 쿼리를 사용하여 한 열의 합계에 다른 열의 합을 곱합니다.

확실한 방법은 다음과 같습니다

total_no_of_units = TableName.sum(:units) 
overall_average_revenue = TableName.average(:revenue_per_unit) 
total_revenue = total_no_of_units * overall_average_revenue 

그러나 두 개의 별도의 SQL 쿼리를 사용하지 구역질을 느낀다. 하나의 연속 된 ActiveRecord 쿼리로이 작업을 수행 할 수있는 방법이 있습니까? 또는 원시 SQL을 사용하여 수행 할 수 있습니까?

편집 : 방금 위의 샘플 코드가 잘못되었다는 것을 깨달았습니다! overall_average_revenuerevenue_per_unit 열의 모든 정수의 평균입니다. 그러나 행마다 다른 수의 단위가 있기 때문에 이것은 단위당 실제 평균 수익과 동일하지 않습니다. 가중 평균이 필요해. 드로잉 보드로 돌아 가기 ...

답변

2

원시 SQL이긴하지만 작동합니다.

TableName.pluck('sum(units) * avg(revenue_per_unit)').first 
+0

이것은 내 원래 질문에 대한 정답입니다 ...하지만 내 질문에 결함이 있으며 실제 평균 수익을 내지 못한다는 사실을 깨달았습니다. (내 편집 내 질문 참조). 어쨌든 upvote 있으십시오 ... – GMA

관련 문제