Агрегация Django - группировка по запросу с использованием бинов - PullRequest
0 голосов
/ 17 мая 2010

Джанго 1.1.1

Models.py:

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

Я хочу преобразовать значения параметра 1 в ближайшее целое число (или другое округление), а затем вернуть среднее значение двух параметров для этого элемента.

В SQL я бы сделал следующее:

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

Могу ли я добиться того же, используя агрегирование набора запросов в представлении django, или оно будет группироваться только по полям напрямую?

В качестве альтернативы, есть ли способ установить округленное значение в виде метаполя в модели и сослаться на это в представлении?

1 Ответ

2 голосов
/ 17 мая 2010

Это должно работать:

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 для округленного значения.

...