2014-11-10 2 views
0

Я вижу эту ошибку:PG :: GroupingError не используется в агрегатной функции

ActiveRecord::StatementInvalid (PG::GroupingError: ERROR: column "playlistships.updated_at" must appear in the GROUP BY clause or be used in an aggregate function 
2014-11-10T01:25:00.821301+00:00 app[web.1]: app/controllers/playlists_controller.rb:9:in `index' 

, когда я запускаю этот запрос:

Playlistship.select("playlist_id, max(updated_at)").order('updated_at desc').group(:playlist_id).paginate(:page => params[:page], :per_page => 12) 

Кажется, я использую updated_at в агрегатной функции, так Я не уверен, что делать дальше?

ответ

0

Вопрос: Если у меня вопрос правильно, вы пытаетесь запустить что-то похожее на:

SELECT playlist_id, max(updated_at) 
FROM PlayListChip 
GROUP BY playlist_id 
ORDER BY updated_at DESC 
LIMIT 12 OFFSET 0 

Причина: Ошибка в том, что вы пытаетесь ORDER BY столбца (updated_at), а не «aggregated» updated_at ... Если вы подумаете об этом, это не сработает. Это связано с тем, что ORDER BY должен быть тем же самым агрегатом, что и поле SELECT (или оно должно быть одним из полей GROUP BY).

Решение: Вы можете заменить

Playlistship.select("playlist_id, max(updated_at)").order('updated_at desc').group(:playlist_id).paginate(:page => params[:page], :per_page => 12) 

с

Playlistship.select("playlist_id, max(updated_at)").order('max(updated_at) desc').group(:playlist_id).paginate(:page => params[:page], :per_page => 12) 
Смежные вопросы