Я сейчас пытаюсь вычислить score
из Survey
в SQL только для того, чтобы иметь возможность заказать опрос по их оценкам,
мой текущий лог c: 1005 *
- Вычислите действительный коэффициент моего
Answer
- Сделайте сумму этого коэффициента для моего
Question
(который может иметь кратные Answer
, поэтому я использую сумму) - вычислить сумму
points
моего целого Survey
на основе суммы всех Question
баллов (Question.point * sum (Answer.coef)) basicaly
Survey.objects.annotate(
answerresponse__realcoef=models.Case(
models.When(answerresponse__coef__isnull=True,
then=models.F('answerresponse__answer__coef')),
models.When(answerresponse__coef__isnull=False,
then=models.F('answerresponse__coef')),
output_field=models.FloatField(),
)
).annotate(
answerresponse__realcoef_sum=models.Sum(
models.F('answerresponse__realcoef')
)
).annotate(
points=models.Sum(
models.F('answerresponse__realcoef_sum') *
models.F('answerresponse__answer__question__points'),
output_field=models.IntegerField()
),
maxpoints=models.Sum('sections__question__points')
)
схема базы данных выглядит примерно так: Опрос> Разделы> Вопросы (баллы)> Ответ (coef)> AnswerResponse (переопределение coef)
, и я получаю следующую ошибку:
FieldError: Cannot compute Sum('<CombinedExpression: F(answerresponse__realcoef_sum) *
F(answerresponse__answer__question__points)>'): '<CombinedExpression: F(answerresponse__realcoef_sum) *
F(answerresponse__answer__question__points)>' is an aggregate
, которая понимается как «эта sql часть еще не была выполнена, поэтому вы не можете на нее положиться»
возможно ли достичь этого, оставив только сторону SQL?