私はかなり新しいプログラミングであり、私が持っている問題の答えを見つけることができません。私はアクティブレコード、レール、sqlite3を使用しています。私はUnitというモデルを持っています。ユニットには、カテゴリ、販売、色などの複数の列と、前述の列の固有の値の組み合わせごとに固有のproduct_codeがあります。私がすることができないことは、持っているproduct_codeに基づいてすべてのユニットを分けて、それぞれの種類のオブジェクトを取得して(最初または何か)取得することです。単位はまた、販売された列に誤った値を持つ必要があります。列値に基づいてオブジェクトを区切り、各グループの最初のオブジェクトを取得および取得する方法はありますか。
Unit.where(sold:false).select(:product_code).distinct
をが、これは私だけ異なるコードを与える:私が最初に試した
#<ActiveRecord::Relation [#<Unit id: nil, product_code: "MONMJARD327">,
#<Unit id: nil, product_code: "LAPEJARD327">,
#<Unit id: nil, product_code: "ESTXJARD327">,
#<Unit id: nil, product_code: "COSGJARD327">,
#<Unit id: nil, product_code: "BOLAJARD327">,
#<Unit id: nil, product_code: "FUNIJARD327">,
#<Unit id: nil, product_code: "CARMJARD327">,
#<Unit id: nil, product_code: "MOCEJARD327">,
#<Unit id: nil, product_code: "COJGJARD327">,
#<Unit id: nil, product_code: "RELG">, ...]>
問題は、私はテーブルを形成することができるので、私はそれぞれ異なるグループの列の値を取得する必要があるということです。そして、私はこれを試してみました:
Unit.where(sold:false).group(:product_code)
これは、開発にうまく働いた:
[#<Unit id: 104, product_code: "BOLAJARD327", sold: false, category_id: 16, remission_id: nil, created_at: "2016-08-23 20:30:13", updated_at: "2016-08-23 20:30:13", fabric_id: 2, color_id: 1, pattern_id: 13, batch_id: nil, profit: nil, date_sold: nil, store_id: nil>,
#<Unit id: 106, product_code: "CARMJARD327", sold: false, category_id: 11, remission_id: nil, created_at: "2016-08-23 20:30:13", updated_at: "2016-08-23 20:30:13", fabric_id: 2, color_id: 1, pattern_id: 13, batch_id: nil, profit: nil, date_sold: nil, store_id: nil>, etc.]
が、開発中、私はPosgresSQLを使用して、これはエラーが発生します。
PG::GroupingError: ERROR: column "units.id" must appear in the GROUP BY clause or be used in an aggregate function
がより良い方法はありますこの選択を行い、意図したとおりにオブジェクトを取得しますか?
ありがとうございます!
PostgreSQLに送られるSQLクエリは何ですか? –
これは私がherokuログから検索できるものです::SELECT "units"。* FROM "units" GROUP BY "units"。 "product_code"):LINE 1:SELECT "units"。* FROM "units" GROUP BY "units "。" product_code –
PostgreSQLは、選択されたカラムとグループ化されたカラムの間の整合性を厳密に守っています。 。 –