【发布时间】:2019-07-06 11:29:43
【问题描述】:
我有一个销售模型,我想计算按month、week、year 分组时的(交易次数)/(天数)。
class SaleItem(models.Model):
id = models.UUIDField(default=uuid4, primary_key=True)
bill = models.ForeignKey()
item = models.ForeignKey('item')
quantity = models.PositiveSmallIntegerField()
price = models.DecimalField(max_digits=13, decimal_places=3, default=0)
因此,如果按月对销售额进行分组,那么每个月的销售额将变为(#transcations/#days in thatmonth)。现在,如果销售额按年份分组,则变为(当年的 # 次交易/# 天)
目前我可以得到交易的数量
aggregate = 'month' # parameter
# get number of transactions
SaleItem.objects.annotate(date=Trunc('bill__date', aggregate)).values('date').annotate(sales=Count('bill', distinct=True))
但是如何将每个计数除以该组中的天数?
【问题讨论】:
-
在 Python/Django 端这样做可能是个好主意,您可以使用
calendar.month_range获取给定月份的天数。 -
我担心与在数据库级别处理相比会降低性能。
-
为什么?这只是一个线性操作。由于反序列化了我们从数据库收到的数据,如果它如此重要,我真的会感到惊讶。是的,应该在数据库端计算聚合等,但这只是聚合的“后处理”。数据库本身并不比 Python/Django 更高效地处理数据,而是更好地处理数据聚合、过滤等。
-
我明白了。那会试试那条路线。
标签: python django django-queryset