2013-08-18 51 views
0

我想要做的是連接表和總計3列。Rails連接表和多項式

self.document_products.joins("JOIN products ON products.id = document_products.product_id").group("products.tax_id").select("sum(a), sum(b), sum(c)") 

給我

#<ActiveRecord::Relation [#<DocumentProduct id: nil>]> 

類似的東西的工作原理:

self.document_products.joins("JOIN products ON products.id = document_products.product_id").group("products.tax_id").sum("a") 

但我想有3個款項。我不能總結(「a,b,c」)。哪裏有問題?

回答

1

因此,代碼使用ActiveRecord鏈接方法語法構建SQL查詢。可以使用.to_sql作爲大多數這樣的鏈的最後一部分(基本上,只要它仍然是一個ActiveRecord對象,例如,而不是被轉換爲一個數組),以查看生成的SQL,或者實際上檢查日誌,如果它已開啓。考慮到鏈條的公共部分:

self.document_products.joins("JOIN products ON products.id = document_products.product_id").group("products.tax_id") 

這會產生類似的信息(可能不準確,因爲我猜一下你的應用程序):

SELECT "document_products".* FROM "document_products" JOIN products ON products.id = document_products.product_id WHERE "document_products"."document_id" = 1497 GROUP BY products.tax_id 

你列出的最後兩個方法是非常不同的; select選擇查詢中要返回的列,而sum是一個聚合函數,它需要在每種情況下返回單個值。考慮到select,我們得到類似下面的產生:

SELECT SUM(products.a), SUM(products.b), SUM(products.c) FROM "document_products" JOIN products ON products.id = document_products.product_id WHERE "document_products"."document_id" = 1497 GROUP BY products.tax_id 

當此查詢的解釋,預期的數據不能被發現,導致所描述的問題。然而,確保SELECT部分中包含GROUP BY子句將產生必要的信息。嘗試是這樣的:

self.document_products.joins("JOIN products ON products.id = document_products.product_id").group("products.tax_id").select("products.tax_id, sum(a), sum(b), sum(c)") 

這將生成SQL是這樣的:

SELECT products.tax_id, SUM(products.a), SUM(products.b), SUM(products.c) FROM "document_products" JOIN products ON products.id = document_products.product_id WHERE "document_products"."document_id" = 1497 GROUP BY products.tax_id 

這似乎回到了必要的信息,並且,我認爲,你在找什麼(或接近它)。

+0

謝謝,答案是在選擇名稱總和:... select(「sum(a)as a,sum(b)as b,sum(c)as c」) – user2693866