做我的code吧 2019-04-04 16:26 采纳率: 0%
浏览 979

Django聚合查询分组后排序统计第一条记录中的result字段为Fail的次数

需求:

有一个需求,有三张表,A、B、C。A-B、B-C都是一对多的关系
1. 先根据第一张表中的name字段分组
2. 再在分组的基础上,对第二张表根据B.name进行分组
3. 在前面的分组的基础上,对第三张表进行排序,按时间排序
4. 取排序后的第一条数据,判断该数据的result字段的值是否为Pass
5.  统计上面符合result字段的值为Pass的记录的总条数

请问这个在Django中怎么实现?
  • 写回答

1条回答

  • 憧憬blog 2023-03-15 08:30
    关注

    您好,根据您的需求,可以使用Django的聚合查询来实现。具体实现步骤如下:

    1. 使用A表的name字段对A、B两个表进行关联查询,并根据name字段进行分组。
    from django.db.models import Count
    
    result_list = A.objects.filter(b__isnull=False).select_related('b').annotate(count=Count('name')).values('name', 'b__name')
    
    1. 在第一步的结果集上,再次进行关联查询,获取第三张表C,并按照时间字段进行排序。
    from django.db.models import Max
    
    result_list = result_list.annotate(max_time=Max('b__c__time')).order_by('-max_time')
    
    1. 取排序后的第一条数据,并判断result字段的值是否为Pass,统计符合条件的记录条数。
    count = 0
    
    for result in result_list:
        if result['b__c_set'][0].result == 'Pass':
            count += 1
        else:
            break
    

    以上代码仅供参考,根据具体的数据模型和业务需求可能需要进行一定的修改。

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。