要在学习系统里找到去重的时间字段,并且还要计数,折腾了一个上午终于搞定! 废话没有 上码!
#target4 = studentDoneQuestions.objects.filter(openid=openid).values('create_time__date').distinct()
target4 = studentDoneQuestions.objects.filter(openid=openid).values('create_time__date').annotate(count=Count('create_time__date')).order_by()
print('去重的数据',target4,openid)
for x in target4:
print(x['create_time__date'],x['count'])
item = studentDoneQuestions.objects.filter(create_time__date=x['create_time__date'],openid=openid).exclude(score=0).values()
print(len(item),'错题数量')
可以看到我第一个 #target4 = studentDoneQuestions.objects.filter(openid=openid).values('create_time__date').distinct()
这个只可以进行去重操作,并且保留数据中 只有CREATE_TIME的字段 并且只留一个数据,得到结果是 2023 03 05 ,2023 03 06等
但并不是我想要的,于是经过一顿查询
target4 = studentDoneQuestions.objects.filter(openid=openid).values('create_time__date').annotate(count=Count('create_time__date')).order_by()
更能解决我的问题,我想要的就是根据日期进行分类数据字段,并把相同日期创建的数据汇总一起帮我数一下,返回的结果是:
去重的数据 <QuerySet [
{'create_time__date': datetime.date(2023, 11, 22), 'count': 58},
{'create_time__date': datetime.date(2023, 11, 21), 'count': 4},
{'create_time__date': datetime.date(2023, 11, 19), 'count': 8}
]>
2023-11-22 58
11 错题数量
2023-11-21 4
1 错题数量
2023-11-19 8
2 错题数量
以下是关于 我查询时候的资料 也可以参考
在Django中,annotate
函数用于对查询结果进行统计和计算。它可以将聚合函数应用于查询结果集,以便对数据进行进一步的计算和汇总。
使用annotate
函数,你可以对查询结果集中的数据进行计数、求和、平均、最大值、最小值等聚合操作。例如,你可以使用Count
、Sum
、Avg
、Max
和Min
等聚合函数来计算数据集中的行数、总和、平均值、最大值和最小值。
下面是一些使用annotate
函数的示例:
- 计算订单总数:
pythonOrder.objects.all().annotate(count=Count('order_id'))
- 计算订单总金额:
pythonOrder.objects.all().annotate(total_amount=Sum('price'))
- 计算销售额最高的订单:
pythonOrder.objects.all().order_by('-price').first()
- 计算客户购买次数最多的产品:
pythonProduct.objects.all().annotate(count=Count('customer'))
通过使用annotate
函数,你可以对查询结果进行更高级的计算和汇总,以便更好地分析和处理数据。