因此,代碼使用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
這似乎回到了必要的信息,並且,我認爲,你在找什麼(或接近它)。
謝謝,答案是在選擇名稱總和:... select(「sum(a)as a,sum(b)as b,sum(c)as c」) – user2693866