2015-11-15 7 views
5

Ich lerne ActiveRecord. Kann ich diese Abfrage erstellen?Zähle und summiere in Join Sub-Abfrage - kann ich diese SQL-Abfrage mit ActiveRecord erstellen?

Ich würde gerne die AR api so viel wie möglich verwenden, aber ich habe noch nicht die oben genannten zu arbeiten mit nur AR.

Danke!

+2

Active ist ein großer ORM aber manchmal will man nach unten fallen, um rohe SQL schreiben:

Sie können Ihre eigenen Query Builder erstellen. Es ist einfacher und präziser. Ich denke ActiveRecord hat seine Grenzen ... – Cyzanfar

+0

Vielleicht beschreiben Sie, was SQL Statement zurückgeben sollte, um uns zu helfen. – Meier

Antwort

1

Ich denke nicht, dass es eine gute Idee ist, AR für diese Abfrage zu verwenden. Es macht zunächst Spaß, wird aber nervig. Und es wird schwierig sein, später zu ändern.

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)) 
Verwandte Themen