有没有像一样使用它的方法
Foo.objects.annotate(geometric_mean=GeometricMean('bars__value'))
或
Foo.objects.annotate(geometric_mean=Power(Prod('bars__value'), Count('bars'))
你可以做一些类似的事情:你可以计算自然对数的平均值:
from django.db.models import Avg
from django.db.models.functions import Ln
Foo.objects.annotate(geometric_mean=Avg(Ln('bars__value')))
那么几何平均数就是它的指数。如果你真的需要几何平均数本身,那么你可以对结果使用Exp
[Django-doc]:
from django.db.models import Avg
from django.db.models.functions import Exp, Ln
Foo.objects.annotate(geometric_mean=Exp(Avg(Ln('bars__value'))))
但是,如果你只想通过两种几何方式对进行排序,你就不需要这样做,因为指数保持顺序关系不变:ea≤eb意味着a≤b,反之亦然。
这是因为ln(x1×x2…×xn(等价于ln[x1]+ln(x2(+…+ln(xn。