tente isso. use group by com o nome da categoria. eu comentei a cláusula create at conforme você especificou, você pode descomentá-la se quiser usá-la.
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;
você notará que não usei a palavra-chave JOIN, mas filtrei os resultados da consulta usando apenas cláusulas WHERE, que podem ser mais fáceis de entender. se você quiser saber mais sobre JOINs, aqui está um tutorial .
Aqui também está um tutorial sobre aliases SQL (a cláusula AS). na verdade, há muitos outros tutoriais neste site para vários tópicos SQL diferentes que não dependem da plataforma.
editar: corrigido conforme comentários, adicionado a função abs,