essaye ça. utilisez group by avec le nom de la catégorie. j'ai commenté la clause created at comme vous l'avez spécifié, vous pouvez la décommenter si vous souhaitez l'utiliser.
SELECT c.name, SUM(ABS(v.item_id))
FROM categories c,items i, votes v
WHERE c.name = i.name
AND i.item_id=v.item_id
--AND v.created_at > #{1.week.ago}
GROUP BY c.name
ORDER BY SUM(ABS(v.item_id)) DESC LIMIT 5;
vous remarquerez que je n'ai pas utilisé le mot clé JOIN mais que j'ai plutôt filtré les résultats de la requête en utilisant uniquement des clauses WHERE, ce qui pourrait être plus facile à comprendre. si vous voulez en savoir plus sur les JOINs, voici un tutoriel .
Voici aussi un tutoriel sur les alias SQL (la clause AS). en fait, il existe un tas d'autres tutoriels sur ce site pour un tas de sujets SQL différents qui ne dépendent pas de la plate-forme.
modifier : corrigé selon les commentaires, ajout de la fonction abs,