如何使用 Postgresql 计算 Rails 4 中的不同查询?
How to count distinct query in Rails 4 with Postgresql?
我有这个 ActiveRecord 查询:
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
。任何关于为什么会发生这种情况的解释都会很棒!
如果在 distinct
之前使用计数,是否可以修复查询?明白 this postgres documentation.
的想法
Stock.select('count(distinct part_number)')...
我有这个 ActiveRecord 查询:
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
。任何关于为什么会发生这种情况的解释都会很棒!
如果在 distinct
之前使用计数,是否可以修复查询?明白 this postgres documentation.
Stock.select('count(distinct part_number)')...