如何获得每个用户对问题答案的最高分数
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"))
我有这两个模型:
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"))