Django Model 按 Thread 分组计算 Count/Size*Number 均值
我有一个 Django Model:
class SimpleHashMapModel(models.Model):
'Simple 哈希映射'
id = models.BigAutoField(primary_key=True)
thread = models.CharField(max_length=12)
count = models.IntegerField()
size = models.IntegerField()
number = models.IntegerField()
class Meta:
db_table = 'simple_hash_map'
如何按 thread 分组求每行的 count/size*number 均值?
直接使用 annotate 中的表达式计算是不行的,因为表达式无法直接使用字段的运算。
result = SimpleHashMapModel.objects.values('thread').annotate(
avg_count_size_number=(Avg('count' / 'size' * 'number'))
)
正确的做法是使用 F 表达式来引用字段,如下所示:
from django.db.models import F, ExpressionWrapper, FloatField
result = SimpleHashMapModel.objects.values('thread').annotate(
avg_count_size_number=ExpressionWrapper(
Avg(F('count') / F('size') * F('number')),
output_field=FloatField()
)
)
原文地址: https://www.cveoy.top/t/topic/nuEx 著作权归作者所有。请勿转载和采集!