0
点赞
收藏
分享

微信扫一扫

django学习笔记03 增删改查的苦恼

生态人 2023-11-22 阅读 51

要在学习系统里找到去重的时间字段,并且还要计数,折腾了一个上午终于搞定! 废话没有 上码!


				#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函数,你可以对查询结果集中的数据进行计数、求和、平均、最大值、最小值等聚合操作。例如,你可以使用CountSumAvgMaxMin等聚合函数来计算数据集中的行数、总和、平均值、最大值和最小值。

下面是一些使用annotate函数的示例:

  1. 计算订单总数:

pythonOrder.objects.all().annotate(count=Count('order_id'))

  1. 计算订单总金额:

pythonOrder.objects.all().annotate(total_amount=Sum('price'))

  1. 计算销售额最高的订单:

pythonOrder.objects.all().order_by('-price').first()

  1. 计算客户购买次数最多的产品:

pythonProduct.objects.all().annotate(count=Count('customer'))

通过使用annotate函数,你可以对查询结果进行更高级的计算和汇总,以便更好地分析和处理数据。

举报

相关推荐

0 条评论