我有一个 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()
    )
)
Django Model 按 Thread 分组计算 Count/Size*Number 均值

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

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