如何尽快从查询集中获取加权平均值。是否可以不使用循环。下面是一个例子。
\n我的模型.py:
\nclass Product(models.Model):\n price = models.DecimalField(max_digits=15, decimal_places=2)\n weighted = models.IntegerField()\n day = models.IntegrField()\nRun Code Online (Sandbox Code Playgroud)\n在我的数据库中,第一天有以下值 \xe2\x80\x8b\xe2\x80\x8b:
\nObject ID I: Price=100, weighted=12, day=1\nObject ID II: Price=50, weighted=1, day=1\nObject ID III: Price=75, weighted=3, day=1\nRun Code Online (Sandbox Code Playgroud)\n如何计算第一天的加权平均值?
\nday_1_average_weighted = Product.objects.filter(day=1) ???how to get a weighted average - 71.88???\nRun Code Online (Sandbox Code Playgroud)\n
您可以通过以下方式实现:
from django.db.models import F, Sum
Product.objects.filter(day=1).aggregate(
weighted_sum=Sum(F('weighted') * F('price')) / Sum('weighted')
)Run Code Online (Sandbox Code Playgroud)
这将返回一个包含一项的字典:weighed_sum将包含加权和。
例如:
>>> Product.objects.create(weighted=9, price=2, day=1)
<Product: Product object (1)>
>>> Product.objects.create(weighted=1, price=5, day=1)
<Product: Product object (2)>
>>> Product.objects.filter(day=1).aggregate(
... weighted_sum=Sum(F('weighted') * F('price')) / Sum('weighted')
... )
{'weighted_sum': Decimal('2.300000')}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
348 次 |
| 最近记录: |