Если вы измените свое утверждение на это, оно должно работать:
SELECT c.id, SUM(ABS(v.vote)) AS score
FROM categories c,items i, votes v
WHERE c.id = i.category_id
AND i.id = v.voteable_id
AND v.created_at > '#{1.week.ago}'
GROUP BY c.id
ORDER BY score DESC LIMIT 8;
Я не уверен, что MySQL дает в результате, но чтобы дать вам очень маленький пример того, почему это не работает в PostgreSQL, взгляните на следующую таблицу categories
:
id | name
---|-----
1 | ABC
1 | DEF
Вы группируете по id
, поэтому каждая строка в результате должна содержать только одну id
. Если вы выберите name
также, без группировки по нему, что должно быть показано в результате для name
?
Это может быть либо ABC
, либо DEF
, но движок базы данных не может действительно решить это за вас (хотя MySQL, очевидно, и так).