ruby-on-rails - 如何使用 PGSQL 自动处理分组?

标签 ruby-on-rails postgresql

我必须对我的数据库进行计算。当我使用 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/

相关文章:

ruby-on-rails - 仅适用于 JSON 的 Rails 脚手架

mysql - 未在 MySQL、PostgreSQL 和 SQLite 中创建 Sequelize 关联

performance - Postgresql 数据库在我繁忙的交易时间完全卡住了

mysql - MySQL 日期时间格式是否适用于 SQLite 和 PostgreSQL?

sql - IF SQL 从 MySQL 到 PostgreSQL 的转换

ruby-on-rails - 在 OpenShift 中运行的 Redmine 中安装插件

ruby-on-rails - 使用 rails 计算值并将值插入表列

ruby-on-rails-3 - heroku pgbackups - 它是如何工作的?

javascript - Rails 的谷歌地图 : after map load callback

mysql - 计算多对多关联记录