Rails中的嵌套查询,不使用find_by_sql

时间:2015-06-09 03:44:40

标签: mysql sql ruby-on-rails

我的SQL查询是

SELECT MAX(sale_money)
FROM (
    SELECT SUM(sale_money) sale_money
    FROM sales
    WHERE MONTH(created_at) = 5
    GROUP BY user_id
) t

我在Rails 4代码中编写子查询:

record = Sale.select("SUM(sale_money) AS sale_money").where("MONTH(created_at) = 5").group(:user_id)

有人可以教我根据max_record或其他查询查询recordmax_record = Sale.find_by_sql(my_raw_sql)max_record = Sale.where(my_raw_sql)

除外

1 个答案:

答案 0 :(得分:1)

是的,可以使用Activerecord form方法完成相同的操作。

Sale.from(Sale.select("SUM(sale_money) AS sale_money")
               .where("MONTH(created_at) = 5")
               .group(:user_id), :t
         )
    .select("MAX(t.sale_money) as sale_money")

但是,你可以这样做:

Sale.select("SUM(sale_money)")
    .where("MONTH(created_at) = 5")
    .group(:user_id)
    .order("SUM(sale_money) DESC")
    .limit(1)

上述内容不需要2 SELECT 查询。