2016-11-21 21 views
0

ようこそ.....(レール)のpostgresエラー(コラム「posts.idは」GROUP BY句に現れなければなりません)

私は私のレールのアプリ

@section.posts.select("posts.*, count(posts.user_id) as user_posts_count").group('posts.user_id') 
.order("user_posts_count DESC").limit(10) 
上で最も利用者のポストを取得したいです

しかし、それはHerokuの ための最善の方法ですが、私はこのエラーを取得する理由を私は知らないのでsqlit3とmysql2

PG::GroupingError: ERROR: column "posts.id" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT posts.*, count(posts.user_id) as user_posts_count FR...

上のあらゆる問題のない私のコードの作品は、私は、PostgreSQLを使用する必要がある一方で、私は、PostgreSQLに問題がありますにPostgreSQLの

誰も私を助けている場合、私は願っています

>>>

+3

'group by'では決して' select * 'を使わないでください。 –

+0

このエラーは、何が間違っているかを正確に伝えています。あなたの 'select()'のすべての列も 'group()'になければなりません。 'count()'、 'sum()'、 'avg()'などのコース計算を除外します。おそらくuser_idのようなものを選択したいだけです。 group(:user_id).order( "user_posts_count DESC")。limit(10) '@ section.posts.select(" user_id、count(user_id)as user_posts_count ")。 – Dan

+0

あなたの兄弟の仕事に感謝しています。私はまだもう少し経験が必要だと思いますが、なぜpostgreSQLで動作しないのですが、mysqlとsqliteで作業するのですか –

答えて

0

使用して、で、グループ内の他のすべてのフィールドを追加する必要があり、グループからIDを削除します。*悪いpraticeで、plsは使用しないでください。*例えば、count()を持つ選択項目

関連する問題