2010-11-29 104 views
0

使用Django,我想通過從每天有多個條目的表中彙總來生成具有一些日常統計數據的查詢集。這裏的表使用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')) 

回答

0
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) 
+0

這並沒有工作,但它讓我在正確的軌道上。如果出現這種情況,表中的所有字段都會以Django生成的GROUP BY結尾。如果你在註釋之前插入.values(),你會得到正確的結果 – 2010-11-29 04:41:38