如何获得每个用户对问题答案的最高分数

How to get max score of answers to a question by each user

我有这两个模型:

class Question(models.Model):
    title = models.CharField(max_length=200)
    # other fields

class Answer(models.Model):
    user = models.ForeignKey(User)
    question = models.ForeignKey(Question)
    score = models.IntegerField()  

每个用户可以多次回答一个问题。

假设我有这些答案:

{
     "user": 1,
     "question": 1,
     "score": 50
},
{
     "user": 1,
     "question": 1,
     "score": 100
},
{
     "user": 2,
     "question": 1,
     "score": 100
},
{
     "user": 2,
     "question": 1,
     "score": 200
},
{
     "user": 2,
     "question": 2,
     "score": 100
},
{
     "user": 2,
     "question": 2,
     "score": 200
}  

我想要一个查询给我这个结果:

{
     "user": 1,
     "question": 1,
     "max_score": 100
},
{
     "user": 2,
     "question": 1,
     "max_score": 200
},
{
     "user": 2,
     "question": 2,
     "max_score": 200
}  

我想要每个用户对每个答案的所有最高分数。

我不确定如何使用 Django ORM 实现您的目标,但您可以使用 RawSQL 实现

Answer.objects.raw("""
select a1.* from answer a1 LEFT JOIN answer a2
    ON (
        a1.user_id = a2.user_id and a1.score < a2.score
    )
where a2.user_id isnull
""")

解释:你只从你 table 那里得到记录,每个用户没有来自同一个 table 的更大 score 的记录。

试试这个:

from django.db.models import Max

Answer.objects.all().values("user", "question").annotate(score=Max("score"))