首页 > 解决方案 > 合并来自两个带注释查询的结果

问题描述

我正在尝试查询 django 以获得以下结果:

subject_name、total_grades、passed_grades、passed_precentage

数学,20,15,75.0

查询是:

from django.db.models import Count
passed_bysubjects = grades.objects.filter(yeardata__year="2011-2012",grade__gte=5).values('code__name').annotate(Passed=Count('grade'))
total_bysubject = grades.objects.filter(yeardata__year="2011-2012").values('code__name').annotate(Total=Count('grade'))

我已经完成了我在下面发布的操作,但我想知道是否有更好的方法。

results = list(total_bysubject)
for a in passed_bysubjects:
    for b in results:
        if a['code__name'] == b['code__name']:
            b['Passed'] = a['Passed']
            b['Percentaje'] = (b['Passed'])*100/b['Total']

这可以通过使用 django 方法来实现吗?

谢谢

标签: djangoorm

解决方案


感谢@schillingt,他向正确的方向发布了我的信息。

就我而言,解决方案是:

qset = grades.objects.filter(
    yeardata__year="2011-2012"
).values('code__name').annotate(
    Average=Avg('grade'),
    Passed=Count('grade',filter=Q(grade__gte=5)),
    Total=Count('grade'),
    Percentaje=F('Passed')*100/F('Total')
)

我的数据是这样的:

学生、代号、年份、年级

(主题的代号)

我想得到关于每个主题的一些统计数据


推荐阅读