2012-03-08 51 views
2

我知道這聽起來像是「爲我做功課」的問題,但我一直在努力用ActiveRecord重新創建此查詢一段時間,現在想知道是否可以做此無需求助於使用ActiveRecord::Base.connection.execute如何在ActiveRecord中重新創建此查詢

結構基本上:

Member has_many orders and transactions

我需要顯示所有誰了訂單,從訂單的總量的成員,和交易的一個數給定的日期範圍按總量排序。

我能得到我需要用下面的查詢數據:

SELECT members.*, 
SUM(orders.amount) AS total_amount, 
COUNT(transactions.id) AS total_transactions 
FROM members 
INNER JOIN orders ON (orders.member_id = member.id) 
LEFT JOIN transactions ON (transactions.member_id = members.id) 
WHERE orders.created_at BETWEEN "2012-03-01" AND "2012-04-01" 
GROUP BY member.id 
ORDER BY total_amount DESC 

是否有可能制定通過的ActiveRecord此查詢?

回答

2

這是我會做它通過ActiveRecord的:

Member.includes(:orders, :transactions).select("SUM(orders.amount) as total_amount").where("orders.created_at BETWEEN '2012-03-01' AND '2012-04-01'").group('members.id').order('total_amount DESC') 

這包括大量的原始SQL片段。如果你想用實際的Ruby代碼替換那些,你可以通過創造性地使用Member.arel_table來實現。有關如何做到這一點的信息,請參閱the Arel documentation