假设你的模型名为 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模型分组计算:按标签和线程分组,计算平均值和加权平均值

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

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