假设你的model名为MyModel,包含以下字段:

  • label: 字符串类型,用于标识不同的标签
  • thread: 字符串类型,用于标识不同的线程
  • size: 整数类型,表示大小
  • num: 整数类型,表示数量
  • frameTime: 整数类型,表示帧时间
  • frameNum: 整数类型,表示帧数

你可以按照以下步骤实现你的需求:

  1. 导入必要的库
from django.db.models import Sum, Avg
  1. 查询每个label下每个thread的size均值和num均值
queryset = MyModel.objects.values('label', 'thread').annotate(
    size_avg=Avg('size'), num_avg=Avg('num')
)
  1. 查询每个label下所有thread的frameTime之和和frame数
label_frame_time_qs = MyModel.objects.values('label').annotate(
    frame_time_sum=Sum('frameTime'), frame_num_sum=Sum('frameNum')
)
  1. 将查询结果转换为字典
label_frame_time_dict = {item['label']: item for item in label_frame_time_qs}
  1. 遍历查询结果,计算每个label下每个thread的结果
for item in queryset:
    label = item['label']
    thread = item['thread']
    size_avg = item['size_avg']
    num_avg = item['num_avg']
    frame_time_sum = label_frame_time_dict[label]['frame_time_sum']
    frame_num_sum = label_frame_time_dict[label]['frame_num_sum']
    result = size_avg / num_avg * (frame_time_sum / frame_num_sum)
    print(label, thread, result)

注意:以上代码只是伪代码,需要根据你的实际情况进行调整

我有一个django model我需要按label和thread分组求每个label下每个thread的size均值除以num均值并乘以每个label下每个thread的frameTime之和除以每个label的frame数

原文地址: https://www.cveoy.top/t/topic/cxsZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录