在Rails 4中,我有这3个表:
包含以下列的用户表: -名称 -email
包含以下列的订单表: -量 -user_id
包含以下列的项目表: -名称 -description
包含以下列的OrderItems表: ORDER_ID ITEM_ID
关系: -orderItems表是一个连接表 - 用户订单很多,订单属于用户。
问题: 1)找到5个最大订单(订单最多的订单) 我认为查询是:
OrderItem.group(:order_id).order(count(id) desc").limit(5).pluck(:order_id)
小组究竟做了什么?当我输入OrderItem.group(:order_id)
时,我不理解输出。
2)如何找到名为“betty”和“the email”betty@gmail.com的用户。为此,我是否需要在我的Arel中编写SQL?
答案 0 :(得分:0)
OrderItem.group(:order_id)
本身不会产生有效的SQL。 group
变为SQL GROUP BY
语句,如果它们为指定的列共享相同的值,则将行组合在一起。 GROUP BY
需要与SELECT
语句一起使用,该语句包含GROUP BY
中的列或COUNT
之类的聚合函数。
您的完整查询缺少order
子句中的引号。你想要:
OrderItem.group(:order_id).order("count(id) desc").limit(5).pluck(:order_id)
要找到名称为" betty"的用户和电子邮件" betty@gmail.com"你可以使用:
User.where(name: "betty", email: "betty@gmail.com")