2010-05-17 87 views
0

的Django 1.1.1Django的聚合 - 通过使用查询仓组

Models.py:

class Datapoint(models.Model): 
    parameter1 = models.FloatField() 
    parameter2 = models.FloatField() 

欲仓参数1为最接近的整数(或者其他四舍五入)的值,然后返回这个bin的两个参数的平均值。

在SQL我将做到以下几点:

select round(parameter1,0), 
    avg(parameter1), 
    avg(parameter2) 
from Datapoints 
group by round(parameter1,0) 
order by round(parameter1,0) 

我可以实现在一个Django视图的查询集的使用聚合相同,或将它只能通过直接场组?

或者,有没有办法将四舍五入的值设置为模型中的元字段,并在视图中引用此值?

回答

2

这应该工作:

from django.db.models import Avg 
Datapoint.objects.extra(
    select={'rounded_param1': 'ROUND(parameter1)'} 
).values('rounded_param1').annotate(Avg(parameter1)).annotate(Avg(parameter2)) 

一看从查询生成的SQL表明,它确实GROUP BY上舍入值。

+0

完美的作品,谢谢! - 我对官方.extra()文档有点困惑 – meepmeep 2010-05-18 09:34:18