2017-09-16 42 views
0

我有這樣的代碼在我的SQL視圖:與表達總和活動記錄軌道

SELECT 
    reports.`date` 
    reports.book_title 
    SUM(reports.net_sold_count * reports.avg_list_price/10) AS revenue 
FROM 
    reports 
GROUP BY 
    reports.date, 
    reports.book_title 

我必須要翻譯成Ruby代碼

我的活動記錄模式

class Report < ActiveRecord::Base 

權現在我有這樣的代碼:

Report.group(:date, :book_title) 

但我不知道下一步去哪裏,因爲.sum中的所有示例只接受一個參數(http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-sum

UPD: 現在,我想嘗試像

Report.select('date, book_title, SUM(reports.net_sold_count * reports.avg_list_price/10) AS revenue').group(:date, :book_title) 
+0

可能是arel可以幫助它 –

回答

1

#sum文檔具有誤導性。是的,#sum只接受一個參數,但該參數不一定是與列名相對應的符號,該參數也可以是使用可用列的SQL表達式。特別是,參數#sum可能是Ruby的字符串:

'reports.net_sold_count * reports.avg_list_price/10' 

,所以你可能會說:

Report.group(:date, :book_title).sum('reports.net_sold_count * reports.avg_list_price/10') 

這會給你一個哈希看起來像:

{ 
    [some_date, some_title] => some_sum, 
    ... 
} 

你可以根據需要將它們分開放回紅寶石土地。

+0

如果我需要的結果像對象數組''{:date => some_date,:sum => some_sum},.....] '(就像執行sql代碼的結果,我提供) – user2950593

+0

然後,你可以用一個簡單的Ruby來「拉開它」,可能使用類似於map {|(a,b),c | {:a => a,:b => b,:c => c}}'。 –