2017-07-10 14 views
0

のActiveRecordのPostgreSQLとのエラーではなく、SQLiteの - GroupingError - このActiveRecordのクエリは、SQLiteの中で働くの列がGROUP BY句に現れなければならないか、集約関数で使用することが

PostgreSQLの
SlotReq.group(:team_id) 

、同じクエリはこれを提供しますエラー「GroupingError - 列slot_reqs.idは、GROUP BY句に現れなければならないか、集約関数で使用される」

this questionへの回答に基づいて、私は私のクエリを変更:

SlotReq.select("slot_reqs.team_id").group("slot_reqs.team_id") 

と期待どおりに動作します。

私はそれを正しくやっているのですか?これはなぜ機能しますか?

+0

は、表内で一意のteam_idですか?どのバージョンのPostgreSQLを使用していますか? – coorasse

+1

この回答は明らかにすることがあります。 https://stackoverflow.com/a/18061451/7573791 – Sajin

+0

チームIDはテーブル内の外部キーなので、一意ではありません。 – RajeshM

答えて

2

はい、あなたは右のそれをやっている、あなたも使用できるが、:

SlotReq.select(:team_id).group(:team_id) 

何が起こることはPG(他のDBの中では)SELECT内のすべてのカラム名が集約されたかGROUP BYで使用されるのいずれかでなければならないという必要があることです句;

selectgroupにしたい列を指定すると、その列には何も入力しないでください。任意の列を省略します。一方、groupselectなしで使用すると、SELECT * FROM table GROUP BY columnを実行するのと同じことになりますが、これはすべての列を持ちますが、GROUP BY節に1つしか指定されていません。

+0

私の質問をあなたのものに置き換えました。私にははるかに良く見えます。あなたの説明をありがとう。 – RajeshM

関連する問題