Zkuste to. použijte skupinu podle s názvem kategorie. Zakomentoval jsem vytvořenou klauzuli at, jak jste uvedli, můžete ji odkomentovat, pokud ji chcete použít.
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;
všimnete si, že jsem nepoužil klíčové slovo JOIN, ale místo toho filtroval výsledky dotazu pouze pomocí klauzulí WHERE, což může být srozumitelnější. pokud se chcete o JOINech dozvědět více, zde je návod .
Zde je také výukový program o aliasech SQL (klauzule AS). ve skutečnosti je na tomto webu spousta dalších tutoriálů pro spoustu různých SQL témat, která nejsou závislá na platformě.
upravit: opraveno podle komentářů, přidána funkce abs,