Konwersja wyboru MySQL na PostgreSQL
Mam to zapytanie, które działa poprawnie w MySQL. Więcej informacji na ten temattutaj.
SELECT c.*, SUM(ABS(v.vote)) AS score
FROM categories c,items i, votes v
WHERE c.id = i.category_id
AND i.id = v.voteable_id
AND v.created_at > '#{1.week.ago}'
GROUP BY c.id
ORDER BY score DESC LIMIT 8;
Próbowałem uruchomić go w PostgreSQL i nie powiodło się z tym komunikatem o błędzie.
PGError: ERROR: kolumna „c.name” musi pojawić się w klauzuli GROUP BY lub być używana w funkcji agregującej
Nie byłem pewien, co to oznacza, więc spróbowałem zmienić „c.id” na „c.name” w klauzuli group by (obie działają w MySQL tak samo, zakładając, że nazwa elementu jest unikalna).
Jednak to właśnie spowodowało kolejny podobny błąd
PGError: ERROR: kolumna „c.id” musi pojawić się w klauzuli GROUP BY lub być używana w funkcji agregującej
Jak rozwiązać ten problem?