Как обрабатывать группы автоматически с PGSQL? - PullRequest
1 голос
/ 24 сентября 2010

Я должен сделать расчеты в моей базе данных.Когда я использовал mysql, это не было проблемой, но теперь, когда я использую PGSQL, я вижу следующую проблему:

У меня есть 3 таблицы: dogs, users и dogs_users, таблица соединения (это nnкаждая собака может иметь несколько пользователей, и каждый пользователь может иметь несколько собак)

Когда я делаю следующее:

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)

И это не очень читабельно и не очень оптимизировано ...

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 16 ноября 2010

Вы можете использовать отличное вкл, если вам все равно, какое из множества значений вы получите:

выберите отличное в (col1, col2) col1, col2, col3 из sometable;

Обратите внимание, что вы можете получить любое значение для col3 здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...