2016-04-03 20 views
0

raylar için --upgrading bir toplama işlevi kullanılacak ve bu yeni hata alıyorum kapalı kurtulmak mümkün olmamıştır:GROUP BY deyimindeki görünmesi lazım yoksa 4 raylar için raylar 3.2 yükseltme am 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 

Yani hata ikinci satırda oluyor:

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

Benim sorgu şudur.

eklendiğinde, önerilen here eklemeye çalıştım ama sonra soru tablosuyla ilgili farklı bir hata alıyorum.

Diğer mesajlar vahşi kartları kaldırarak önerdi, bu yüzden ("cevaplar, questions.possible_answers") .Select eklendi, ama sonra

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

denemek için başka ne emin değilim olsun

cevap

0

Sorun, first numaralı telefonu aramakla oldu. Kodumu şu şekilde değiştirmem gerekti:

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