【问题标题】:Calculating average age in Django在 Django 中计算平均年龄
【发布时间】:2023-03-28 01:07:01
【问题描述】:

我需要找出物品的平均年龄(按各种标准分组,但这似乎不是问题)。但是,我找不到如何使用 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()

【问题讨论】:

    标签: mysql django datetime aggregate


    【解决方案1】:

    我认为没有其他方法可以使用extra 方法。它应该看起来像这样(未经测试):

    Item.objects.extra('avg': 'AVG(UNIX_TIMESTAMP(created))'.values('avg')
    

    问题是,您必须先将日期转换为 UNIX 时间戳。否则你无法计算平均值。平均字符串确实会产生垃圾。

    【讨论】:

    • 好吧,我很困惑我得到了 Item 对象,即使有这么多的东西导致我错误地假设它没有进行聚合:-)。
    猜你喜欢
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2023-04-04
    • 2021-12-23
    • 2020-07-26
    • 2017-04-20
    相关资源
    最近更新 更多