我正在尝试在Django中构建一个查询,该查询将在一定范围内获取(即平均)的平均值相加。
以下是相关的Django模型:
class Data(models.Model):
class Meta:
verbose_name_plural = "Data"
site = models.ForeignKey(Site)
created_on = models.DateTimeField(auto_created=True)
reported_on = models.DateTimeField(null=True, blank=True)
baseline_power_kw = models.FloatField('Baseline Power (kw)', blank=True, null=True)
measured_power_kw = models.FloatField('Measured Power (kw)', blank=True, null=True)
在我的查询中,我试图在一段时间内对网站的数据进行平均,然后对每个时间范围的平均值求和。这是我到目前为止的查询,我相信只是在一段时间内得到所有网站数据的平均值。
t_data = Data.objects.filter(site__in=sites) \
.filter(created_on__range=(start, end)) \
.extra(select={'date_slice': "trunc(extract(epoch from created_on) / '60' )"}) \
.values('date_slice') \
.annotate(avg_baseline_power_kw=Avg('baseline_power_kw'),
avg_measured_power_kw=Avg('measured_power_kw'),
time=Min('created_on')) \
.order_by('-created_on')
你知道我怎么办吗?我正在和Postgres一起使用Django。
谢谢!
答案 0 :(得分:1)
如果您添加' site'你的.values()子句,如下所示:
.values('date_slice', 'site')
并删除order_by,这将导致' created_on'要添加到生成的SQL GROUP BY的字段,您应该获得每个切片+站点的两次测量的平均值。然后,您可以对这些值求和,以获得所有站点的总计。