Django模型分组计算:按标签和线程分组,计算平均值和加权平均值
假设你的模型名为 MyModel,包含以下字段:
- label: 字符串类型,用于标识不同的标签
- thread: 字符串类型,用于标识不同的线程
- size: 整数类型,表示大小
- num: 整数类型,表示数量
- frameTime: 整数类型,表示帧时间
- frameNum: 整数类型,表示帧数
你可以按照以下步骤实现你的需求:
- 导入必要的库
from django.db.models import Sum, Avg
- 查询每个 label 下每个 thread 的 size 均值和 num 均值
queryset = MyModel.objects.values('label', 'thread').annotate(
size_avg=Avg('size'), num_avg=Avg('num')
)
- 查询每个 label 下所有 thread 的 frameTime 之和和 frame 数
label_frame_time_qs = MyModel.objects.values('label').annotate(
frame_time_sum=Sum('frameTime'), frame_num_sum=Sum('frameNum')
)
- 将查询结果转换为字典
label_frame_time_dict = {item['label']: item for item in label_frame_time_qs}
- 遍历查询结果,计算每个 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)
注意:以上代码只是伪代码,需要根据你的实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/nw0I 著作权归作者所有。请勿转载和采集!