mysql - 如何在 ActiveRecord 中重新创建此查询

标签 mysql ruby-on-rails activerecord

我知道这听起来像是一个“为我做作业”的问题,但我一直在努力使用 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/

相关文章:

ruby-on-rails - 是否可以根据 ruby​​ 中的相似性对字符串数组进行分组

mysql - Rails 4 - 如何通过 has_many 关联与同一列上的多个条件查询集合?

ruby-on-rails - 我如何判断 ActiveRecord 对象是否会在实际销毁之前被销毁?

ruby-on-rails - 如何定义在 Ruby on Rails 5.2 中的 ActiveRecord 迁移中创建表时使用的顺序?

php - 给定日期的预定数据库更新 - MySQL 和 PHP

python - 如何插入多对多关系的记录?

php - 如何将 mysql 本地数据库与 AWS 云数据库同步

c++ - 在mysql服务器源代码中找不到 'ib_lock_t'的定义

javascript - ActionCable channel 示例 1 : User appearances. 循环?

jquery - Rails 3.2.12 根据第一个 collection_select 的选择选择表单中的第二个元素