【问题标题】:Aggregating data in a single table with Django使用 Django 在单个表中聚合数据
【发布时间】:2010-11-29 03:54:30
【问题描述】:

使用 Django,我想通过从每天包含多个条目的表中聚合来生成包含一些每日统计信息的查询集。这是表格

CREATE TABLE weather
(
  id serial NOT NULL,
  air_temp double precision NOT NULL,
  obs_date date,
  ....
)

这是我想在查询集中得到的结果的 SQL 等价物

select obs_date, avg(air_temp) from weather group by obs_date order by obs_date

Django 模型如下所示

class WeatherData(models.Model):

    obs_date = models.DateField('Obs Date', blank=False, null=False, db_index=True)
    air_temp = models.FloatField('Air Temp', blank=False, null=False)
    ...

我已阅读此http://docs.djangoproject.com/en/dev/topics/db/aggregation/,但不知道该怎么做。建议表示赞赏。

更新:这可行:

WeatherData.objects.values('obs_date').annotate( max_air=Max('air_temp'), min_air=Min('air_temp'))

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:
    somedata = WeatherData.objects.annotate(Avg('air_temp')).order_by('obs_date')
    for datum in somedata:
      print '%s: %s' % (datum.obs_date, datum.air_temp__avg)
    

    【讨论】:

    • 这不起作用,但它让我走上了正轨。出错的地方是表中的所有字段最终都出现在 Django 生成的 GROUP BY 中。如果您在注释之前插入 .values() 您会得到正确的结果
    猜你喜欢
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多