假设我在db中有100个对象,每个对象都有created_at
和done_at
时间。我想计算所有对象的平均持续时间。有这样的想法:首先计算所有对象的持续时间,然后得到平均值。但还有其他有用的好方法吗?
您可以使用aggregate()
和F
expressions:
from django.db.models import Avg, F
Model.objects.aggregate(average_delta=Avg(F('done_at') - F('created_at')))
除了this answer,你也可以尝试一下
from django.db.models import Avg, F
Model.objects.annotate(diff=F('done_at') - F('created_at')).aggregate(duration=Avg('diff'))
使用杰特和杰林彼得乔治的回答几乎没有变化,它完美无缺:
from django.db.models import Avg, F, Sum, DurationField
IssueDone.objects.annotate(time_elapsed=Sum(Cast(F('done_date')-F('created_date'), DurationField()))).aggregate(Avg('time_elapsed'))