MySQL намного слабее интерпретирует стандартный SQL, чем PostgreSQL.В вашем запросе есть две проблемы:
- Заключение в кавычки - это вещь MySQL.
- Ваш
GROUP BY
недействителен.
Первый можетисправить, просто удалив оскорбительные цитаты.Второй требует больше работы;из тонкого руководства :
Когда присутствует GROUP BY
, недопустимо, чтобы выражения списка SELECT
ссылались на разгруппированные столбцы, кроме как в агрегатных функциях, посколькуможет быть более одного возможного значения для несгруппированного столбца.
Это означает, что каждый столбец, упомянутый в вашем SELECT
, должен появляться в статистической функции или в предложении GROUP BY
.Итак, вы должны расширить ваш p.*
и убедиться, что все эти столбцы находятся в GROUP BY
, в итоге вы должны получить нечто подобное, но с реальными столбцами вместо p.column...
:
select p.id, p.column..., sum(v.vote) as votes_count
from votes v, posts p
where p.id = v.voteable_id
and v.voteable_type = 'Post'
group by p.id, p.column...
order by votes_count desc
limit 20
Это довольно распространенная проблема при переходе с MySQL на что-либо еще.