probeer dit. gebruik group by met de naam van de categorie. ik heb commentaar gegeven op de gemaakte at-clausule zoals je hebt gespecificeerd, je kunt het commentaar verwijderen als je het wilt gebruiken.
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;
je zult merken dat ik het JOIN-sleutelwoord niet heb gebruikt, maar in plaats daarvan de resultaten van de query heb gefilterd met alleen WHERE-clausules, wat misschien gemakkelijker te begrijpen is. als je meer wilt weten over JOINs, hier is een tutorial .
Ook hier is een tutorial over SQL-aliassen (de AS-clausule). in feite zijn er nog veel meer tutorials op deze site voor een heleboel verschillende SQL-onderwerpen die niet platformafhankelijk zijn.
bewerken: opgelost volgens opmerkingen, de abs-functie toegevoegd,