Join子查询中的Count和Sum - 我可以使用ActiveRecord构建此sql查询吗?

Cor*_*aan 5 ruby activerecord ruby-on-rails

我正在学习ActiveRecord.我可以构建此查询吗?

    @sales_by_product = ActiveRecord::Base.connection.execute("SELECT
    it.name,
    it.id,
    it.seller_id,
    pur.volume,
    pur.sales
    FROM items it
    INNER JOIN (SELECT
        item_id,
        COUNT(*) AS volume,
        SUM(price) AS sales,
        workflow_state AS state
        FROM purchases
        WHERE workflow_state = 'payment_successful'
        GROUP BY item_id,
        workflow_state) pur
    ON pur.item_id = it.id
    WHERE it.seller_id = '" + current_user.id.to_s + "'")
Run Code Online (Sandbox Code Playgroud)

我想尽可能多地使用AR api,但我还没有使用AR来完成上述工作.

谢谢!

B S*_*ven 1

我认为使用 AR 进行此查询并不是一个好主意。起初看起来很有趣,但后来变得很烦人。而且,以后想改变也很难。

您可以创建自己的查询生成器:

def query_for current_user
  <<-SQL
    SELECT
      it.name,
      it.id,
      it.seller_id,
      pur.volume,
      pur.sales
      FROM items it
      INNER JOIN (SELECT
        item_id,
        COUNT(*) AS volume,
        SUM(price) AS sales,
        workflow_state AS state
        FROM purchases
        WHERE workflow_state = 'payment_successful'
        GROUP BY item_id,
        workflow_state) pur
      ON pur.item_id = it.id
      WHERE it.seller_id = '" + current_user.id.to_s + "'")
  SQL
end

@sales_by_product = ActiveRecord::Base.connection.execute( query_for( current_user ))
Run Code Online (Sandbox Code Playgroud)