I have this query which works correctly in MySQL. More background on it here.
SELECT c.*, SUM(ABS(v.vote)) AS score
FROM categories c,items i, votes v
W
I just had that issue but going from MySQL to SQL Server. I thought the fact that it is allowed it was strange!
Yes, in most databases, when you have a GROUP BY clause you can only select aggregates of columns or columns that appear in the GROUP BY clause. This is because it has no way of knowing if the other columns you're selecting are truly unique or not.
Just put the columns you want in the GROUP BY if they are indeed unique. This was a "feature" of MySQL that was questionable.
You can read about MySQL's behavior and how it is different here.
Example:
SELECT c.*, 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, c.name, c.whatever_else
ORDER BY score DESC LIMIT 8;