2015-11-15 8 views
5

私はActiveRecordを学習しています。このクエリを作成できますか?Joinとサブタブの合計と合計 - ActiveRecordを使用してこのSQLクエリを作成できますか?

@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 + "'") 

私はできるだけARPiを使用したいと思いますが、私はまだARを使用して上記の作業をしていません。

ありがとうございます!

+2

ActiveRecordのは素晴らしいORMですが、時には、あなたは生のSQLを書くことにドロップダウンしたいです。それはより簡単で、より正確です。私はActiveRecordには限界があると思います... – Cyzanfar

+0

多分、SQL文が何を返すべきかを記述して、私たちがあなたを助けるのを助けるでしょう。 – Meier

答えて

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)) 
関連する問題