我需要找出物品的平均年龄(按各种标准分组,但似乎不是问题)。但是我没有找到如何使用Django(在MySQL之上)有效地在DateTimeField上创建聚合。
纯Item.objects.all.aggregate(Avg('created'))
似乎产生了绝对的虚假价值(例如20081988007238.133)并使用Item.objects.all.extra(...)
我找不到如何聚合的方式。
当然我可以手动创建SQL查询(类似SELECT AVG(UNIX_TIMESTAMP(created)) FROM items_item
),但我更愿意避免在应用程序中使用MySQL特定代码。
仅供参考,我用于测试的样本模型:
class Item(models.Model):
name = models.CharField(max_length = 255)
created = models.DateTimeField()
答案 0 :(得分:0)
我认为没有其他方法可以使用extra
方法。它应该看起来像这样(未经测试):
Item.objects.extra('avg': 'AVG(UNIX_TIMESTAMP(created))'.values('avg')
问题是,您必须先将日期转换为UNIX时间戳。否则你无法计算平均值。字符串的平均值确实会产生垃圾。