2015-12-30 79 views
1

我有這樣的ActiveRecord查詢:如何使用Postgresql統計Rails 4中的不同查詢?

Stock.select('DISTINCT ON (stocks.part_number)*').joins(:part, :manufacturer) 
.includes(:manufacturer, :part).order(:part_number).with_cat(category). 
where(manufacturers: {abbr: ['manufacturer1', 'manufacturer2']}) 

with_cat是一個範圍:

scope :with_cat, -> (category) { where(parts: {category_id: category}) } 

我現在用Distinct on的原因是因爲每個製造商都可以有相同的部分,另一種,因此重複。我不想重複。上面的工作完成了。除了當我添加count它時,我收到一個錯誤。

PG::SyntaxError: ERROR: syntax error at or near "ON" 
LINE 1: SELECT COUNT(DISTINCT ON (stocks.part_number)*) FROM "stocks... 
          ^
: SELECT COUNT(DISTINCT ON (stocks.part_number)*) FROM "stocks" 
INNER JOIN "parts" ON "parts"."id" = "stocks"."part_id" 
INNER JOIN "manufacturers" ON "manufacturers"."id" = "stocks"."manufacturer_id" 
WHERE "parts"."category_id" = 17 AND "manufacturers"."abbr" IN ('manufacturer1', 'manufacturer2') 

不確定如何向查詢添加計數而不會導致該錯誤。我也不熟悉Distinct on。爲什麼會發生這種情況的任何解釋都會很棒!

+0

您還可以顯示當您*不*使用'count'時生成的SQL查詢嗎? – jeffdill2

+0

@ jeffdill2它與count的結果查詢相同,但減去'count'及其包含的parens。我可以添加它,但其中只有幾個字符可以刪除,而我目前不在我的編輯器前面。 – Andy

回答

2

它是否修復了查詢,如果您使用提前計數distinct?每this postgres documentation.

Stock.select('count(distinct part_number)')... 
+1

我嘗試使用正常的不同,它沒有工作。但我可能一直在做錯事。我會再試一次。我會讓你知道它是怎麼回事。 – Andy

+1

原來我遇到的問題與查詢無關,但我認爲是這樣。你的答案奏效。謝謝! – Andy

+0

很高興我能幫到你! –

相關問題