1

次のコードを PostgreSQL で動作するように変換しようとしています。

調べてみると、PostgreSQL は MySQL よりも GROUP BY に対して (良い意味で) はるかに厳密であることがわかりましたが、私の人生では、Postgres を満たすためにこのステートメントを書き直す方法がわかりません。

def show
  show! do
    @recent_tasks = resource.jobs.group(:task).order(:created_at).limit(5)
  end
end

PG::Error: ERROR:  column "jobs.created_at" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: ...ND "jobs"."project_id" = 1 GROUP BY task ORDER BY created_at...
                                                         ^
: SELECT  COUNT(*) AS count_all, task AS task FROM "jobs"  WHERE "jobs"."deleted_at" IS NULL AND "jobs"."project_id" = 1 GROUP BY task ORDER BY created_at DESC, created_at LIMIT 5
4

1 に答える 1

1

group by にない column in order は使用できません。
次のようなことができます

@recent_tasks = resource.jobs.group(:task, :created_at).order(:created_at).limit(5)

しかし、それは結果を変えるでしょう

あなたもすることができます

@recent_tasks = resource.jobs.group(:task).order(:task).limit(5)

また

@recent_tasks = resource.jobs.group(:task).order('count(*) desc').limit(5)
于 2012-11-27T22:03:19.937 に答える