2015-11-15 11 views
5

Sto imparando ActiveRecord. Posso creare questa query?Count e Sum in Join sub query - posso creare questa query sql utilizzando 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 + "'") 

Mi piacerebbe usare l'api AR il più possibile ma non ho ancora ottenuto quanto sopra per lavorare usando solo AR.

Grazie!

+2

ActiveRecord è un grande ORM, ma a volte si vuole cadere giù a scrivere SQL prime. È più semplice e più preciso. Penso che ActiveRecord abbia i suoi limiti ... – Cyzanfar

+0

Forse descrivi cosa dovrebbe restituire l'istruzione sql, per aiutarci ad aiutarti. – Meier

risposta

1

Non penso che sia una buona idea utilizzare AR per questa query. All'inizio sembra divertente, ma diventa fastidioso. E, sarà difficile cambiare più tardi.

È possibile creare la propria query builder:

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