Prøv dette. brug gruppe efter med navnet på kategorien. Jeg har kommenteret oprettet ved klausulen ud, som du har angivet, du kan fjerne kommentarer til den, hvis du vil bruge den.
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;
du vil bemærke, at jeg ikke brugte JOIN-søgeordet, men i stedet filtrerede resultaterne af forespørgslen ved kun at bruge WHERE-sætninger, som måske er nemmere at forstå. hvis du vil lære mere om JOINs, her er en tutorial .
Her er også et selvstudie om SQL-aliasser (AS-klausulen). faktisk er der en masse flere selvstudier på denne side for en masse forskellige SQL-emner, der ikke er platformafhængige.
rediger: rettet i henhold til kommentarer, tilføjet abs-funktionen,