Как лучше обойти более строгую группировку PostgreSQL - PullRequest
0 голосов
/ 25 октября 2009

Я пытаюсь перейти от использования MySQL к использованию PostgreSQL. У меня есть такой тип структуры:

Пользователь (субъект) -> Следовать -> Бизнес (субъект) -> История

Пользователь должен видеть все обновления новостей, выпущенные компаниями, за которыми он следит. Следующий запрос прекрасно работает с MySQL, потому что он просто показывает все связанные истории и группы посредством story.id. К сожалению, из-за того, что PostgreSQL гораздо более буквален в интерпретации стандарта SQL, если я хочу выполнить предложение GROUP BY, мне нужно запросить каждое поле отдельно, используя предложение DISTINCT, которое.

Story.find(:all, :joins => { :entity => { :followers => :follower } }, :conditions => ['followers_follows.id = ?', 4], :group => 'stories.id')

PostgreSQL выплевывает: "ОШИБКА: столбец" Stories.entity_id "должен появляться в предложении GROUP BY или использоваться в статистической функции"

Необходимость указывать каждое поле по отдельности выглядит не элегантной. Если кто-нибудь может дать мне простой способ получить тот же результат, что и MySQL, без необходимости прибегать к получению дубликатов полей (удалению группы) или необходимости указывать каждое отдельное поле вместе с предложением DISTINCT, я был бы признателен за это! 1012 *

Спасибо!

1 Ответ

1 голос
/ 25 октября 2009

Ну, я бы точно не сказал, что PostgreSQL интерпретирует стандарт SQL слишком строго. На самом деле, все наоборот.

Вот возможное решение:

Story.all( :joins => { :entity => { :followers=> :follower } },
           :conditions => ['followers_follows.id = ?', 4], 
           :group => Story.column_names.map { |c| "stories.#{c}" }.join(', ') )

Но есть много альтернативных запросов. Я писал об этом несколько недель назад. Вот этот пост: http://awesomeful.net/posts/72-postgresql-s-group-by

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