Django聚合 - 使用bin进行查询分组

时间:2010-05-17 14:55:51

标签: django aggregation

Django 1.1.1

Models.py:

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

我想将parameter1的值加到最接近的整数(或其他舍入),然后返回此bin的两个参数的平均值。

在SQL中,我会执行以下操作:

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

我可以在django视图中使用聚合查询集来实现相同的效果,还是只能直接按字段分组?

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

1 个答案:

答案 0 :(得分: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。