0

Django 1.1.1

Models.py:

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

parameter1の値を最も近い整数(または他の丸め)にビン化し、このビンの2つのパラメーターの平均を返します。

SQLでは、次のようにします。

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

djangoビューのクエリセットで集計を使用して同じことを実現できますか、それともフィールドごとに直接グループ化するだけですか?

または、丸められた値をモデルのメタフィールドとして設定し、ビューでこれを参照する方法はありますか?

4

1 に答える 1

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を見ると、丸められた値に対して実際にGROUPBYが実行されていることがわかります。

于 2010-05-17T18:51:54.957 に答える