我知道这听起来像是一个“为我做作业”的问题,但我一直在努力使用 ActiveRecord 重新创建此查询一段时间,现在想知道是否可以在不使用 的情况下完成此操作ActiveRecord::Base.connection.execute
结构基本上是:
成员(member)有_多笔订单和交易
我需要显示所有已下订单的成员(member)、订单总金额以及按总金额排序的给定日期范围内的交易数量。
我可以通过以下查询获取所需的数据:
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 制定此查询?
最佳答案
这就是我通过 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有关如何执行此操作的信息。
关于mysql - 如何在 ActiveRecord 中重新创建此查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9620188/