我必须对我的数据库进行计算。当我使用 mysql 时,这不是问题,但现在我使用 PGSQL,我看到以下问题:
我有 3 个表:dogs、users 和 dogs_users,连接表(它是一个 n-n,每只狗可以有多个用户,每个用户可以有多个狗)
当我执行以下操作时:
ree-1.8.7-2010.02 > User.first.dogs.group(:name).average(:number_of_fleas)
ActiveRecord::StatementInvalid: PGError: ERROR: column "dogs.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT "dogs".*, AVG("dogs"."number_of_fleas") AS "avera...
^
: SELECT "dogs".*, AVG("dogs"."number_of_fleas") AS "average_number_of_fleas", name AS name FROM "dogs" INNER JOIN "dogs_users" ON "dogs".id = "dogs_users".dog_id WHERE (("dogs_users".user_id = 1)) GROUP BY name
我发现解决该问题的唯一方法是执行以下操作:
Dog.where(:id => User.first.dogs.map(&:id)).group(:name).average(:number_of_fleas)
这不是很可读,也不是很优化......
感谢您的帮助!
最佳答案
如果您不关心返回多个值中的哪一个,则可以使用 distinct on:
从某个表中选择不同的 (col1, col2) col1, col2, col3;
请注意,您可以在此处获取 col3 的任何值。
关于ruby-on-rails - 如何使用 PGSQL 自动处理分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3789019/