Arel查询问题使用where和group

时间:2015-04-23 14:28:09

标签: activerecord

在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?

1 个答案:

答案 0 :(得分:0)

  1. 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)
    
  2. 要找到名称为" betty"的用户和电子邮件" betty@gmail.com"你可以使用:

    User.where(name: "betty", email: "betty@gmail.com")