【发布时间】:2018-12-07 12:59:10
【问题描述】:
假设我在 db 中有 100 个对象,每个对象都有 created_at 和 done_at 时间。我想计算所有对象的平均持续时间。有这样的想法:首先计算所有对象的持续时间,然后取平均值。但是还有其他好方法吗?
【问题讨论】:
-
你也可以使用标准差,看看这里link
假设我在 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')))
【讨论】:
sqlite3 和字段不是date/time 保存为文本。 ://
除了this answer,你也可以试试这个
from django.db.models import Avg, F
Model.objects.annotate(diff=F('done_at') - F('created_at')).aggregate(duration=Avg('diff'))
【讨论】:
DateTimeField 投射它:)
使用 Jieter 和 Jerin Peter George 的答案几乎没有变化,而且效果很好:
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'))
【讨论】: