Spróbuj tego. użyj group by z nazwą kategorii. skomentowałem klauzulę utworzoną w, jak określono, możesz ją odkomentować, jeśli chcesz jej użyć.
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;
zauważysz, że nie użyłem słowa kluczowego JOIN, ale zamiast tego odfiltrowałem wyniki zapytania, używając tylko klauzul WHERE, które mogą być łatwiejsze do zrozumienia. jeśli chcesz dowiedzieć się więcej o JOIN, tutaj jest samouczek .
Tutaj też znajduje się samouczek dotyczący aliasów SQL (klauzula AS). w rzeczywistości na tej stronie znajduje się więcej samouczków dotyczących różnych tematów SQL, które nie są zależne od platformy.
edytuj: naprawiono zgodnie z komentarzami, dodano funkcję abs,