Django的聚合 - 通过使用查询仓组
问题描述:
的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视图的查询集的使用聚合相同,或将它只能通过直接场组?
或者,有没有办法将四舍五入的值设置为模型中的元字段,并在视图中引用此值?
答
这应该工作:
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上舍入值。
完美的作品,谢谢! - 我对官方.extra()文档有点困惑 – meepmeep 2010-05-18 09:34:18