Django - 在具有不同值的组查询中求平均值
Django - Averaging in a Group Query with Distinct values
我有一个与 How to group by AND aggregate with Django
非常相似的问题
这是我的模型:
class Author(models.Models):
name = models.CharField(max_length=9)
class Book(models.Models):
author = models.ForeignKey(Author)
score = models.IntegerField()
这是我想要做的:
select distinct(author__name, AVG(score)
from book
where author__name in ('A, 'B', 'C')
group by author__name order by avg desc;
这是我试过的:
print Book.objects.filter(author__name__in=['A', 'B', 'C'])\
.values_list('author__name', 'score')\
.annotate(avg=Avg('score'))
[('A', 22, 22), ('A', 24, 24), ('B', 50, 50), ('B', 52, 52)]
但我想看:
[('A', 23), ('B', 52)]
有没有办法在查询中正确执行此操作(而不是在 post 处理代码中)?
您正在尝试按作者姓名分组,因此删除 values_list 中的 avg_depth
。 annotate
将为每个作者添加 Avg score/avg_depth
。你可以这样做:
result = Book.objects.filter(author__name__in=['A','B','C']).values_list('author__name').annotate(Avg('score'))
此处values_list
用于按作者姓名进行分组,Avg('score')
将计算每个作者的平均分数,然后使用annotate()
将其注释给每个作者
我有一个与 How to group by AND aggregate with Django
非常相似的问题这是我的模型:
class Author(models.Models):
name = models.CharField(max_length=9)
class Book(models.Models):
author = models.ForeignKey(Author)
score = models.IntegerField()
这是我想要做的:
select distinct(author__name, AVG(score)
from book
where author__name in ('A, 'B', 'C')
group by author__name order by avg desc;
这是我试过的:
print Book.objects.filter(author__name__in=['A', 'B', 'C'])\
.values_list('author__name', 'score')\
.annotate(avg=Avg('score'))
[('A', 22, 22), ('A', 24, 24), ('B', 50, 50), ('B', 52, 52)]
但我想看:
[('A', 23), ('B', 52)]
有没有办法在查询中正确执行此操作(而不是在 post 处理代码中)?
您正在尝试按作者姓名分组,因此删除 values_list 中的 avg_depth
。 annotate
将为每个作者添加 Avg score/avg_depth
。你可以这样做:
result = Book.objects.filter(author__name__in=['A','B','C']).values_list('author__name').annotate(Avg('score'))
此处values_list
用于按作者姓名进行分组,Avg('score')
将计算每个作者的平均分数,然后使用annotate()