2016-04-03 10 views
0

をレールに--upgrading集約関数で使用することが、私は、この新しいエラーは、私が手オフに取り除くことができていない:は、GROUP BY句に現れなければならないか、私は4をレールにレール3.2からアップグレードしています4

answer_query = Answer.joins(:question).where(:created_at => start..finish, :question_id => questions_evaluation, :survey_id => survey_id) 
sum = answer_query.select("sum(CAST(answer AS FLOAT)/(length(questions.possible_answers) - length(replace(questions.possible_answers,';','')) + 1)) as rating").first['rating'].to_f 

だからエラーが2行目に起こっている:

PG::GroupingError: ERROR: column "answers.id" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: ...IN (3778, 3779, 3780, 3783, 3786, 3788) ORDER BY "answers"....^: SELECT sum(CAST(answer AS FLOAT)/(length(questions.possible_answers) - length(replace(questions.possible_answers,';','')) + 1)) as rating FROM "answers" INNER JOIN "questions" ON "questions"."id" = "answers"."question_id" WHERE "answers"."survey_id" = $1 AND ("answers"."created_at" BETWEEN '2016-03-28 00:00:00.000000' AND '2016-04-03 23:59:59.999999') AND "answers"."question_id" IN (3778, 3779, 3780, 3783, 3786, 3788) ORDER BY "answers"."id" ASC LIMIT 1

私のクエリは次のようです。

私はunscopedを提案したようにhereと追加しようとしましたが、質問表に関する別のエラーが発生します。

他の記事は、ワイルドカードを取り外す示唆しているので、私は(「答え、questions.possible_answers」).selectを追加しましたが、その後私は

column "answers.*" must appear in the GROUP BY clause or be used in an aggregate function

は、私が試して他に何かわからない取得

答えて

0

問題は電話であったfirstコードを変更しなければならなかった:

answer_query.select("sum(CAST(answer AS FLOAT)/(length(questions.possible_answers) - length(replace(questions.possible_answers,';','')) + 1)) as rating").limit(1).to_a.first.attributes['rating'].to_f 
関連する問題