Postgresql Неисправный синтаксис при выборе / объединении / группе - PullRequest
0 голосов
/ 31 марта 2011

А как насчет неправильного синтаксиса для Postgresql?

select p.*, SUM(vote) as votes_count 
FROM votes v, posts p 
where p.id = v.`voteable_id` 
  AND v.`voteable_type` = 'Post' 
group by v.voteable_id 
order by votes_count DESC limit 20

Я нахожусь в процессе установки postgresql локально, но хотел получить это раньше:)

Спасибо

1 Ответ

3 голосов
/ 31 марта 2011

MySQL намного слабее интерпретирует стандартный SQL, чем PostgreSQL.В вашем запросе есть две проблемы:

  1. Заключение в кавычки - это вещь MySQL.
  2. Ваш 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 на что-либо еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...