【问题标题】:Django ORM Left Join With GROUP BY and SUMDjango ORM Left Join 与 GROUP BY 和 SUM
【发布时间】:2015-08-21 01:10:49
【问题描述】:

我使用的是 Django 1.8。

我有一个User 模型和一个UserAction 模型。用户有一个类型。 UserAction 有一个时间,表示该操作花费了多长时间。它们看起来像这样:

class User(models.Model):
   user_type = models.IntegerField()

class UserAction:
   user = models.ForeignKey(User)
   time = models.IntegerField()

现在我想做的是获取某种类型的所有用户以及他们操作的时间总和。所以它看起来像这样:

{user:1,total_time=5000}, {user:2,total_time=230}, {user:3,total_time=0}

鉴于我在名为 type 的 var 中有所需的类型,我正在做的是:

UserAction.objects.filter(user__type=type)
.values('user').annotate(total_time=Sum(time))

这几乎可以满足我的需要,但是它不包括给定类型的用户,这些用户没有任何与之关联的 UserAction,在这种情况下,我希望 total_time 仅为 0。我一直在做一些搜索,但不太确定我会如何做到这一点。我知道如何在原始 SQL 中执行此操作(只需执行左连接),但 Django ORM 对我来说仍然很新。谁能在这里指出我正确的方向?任何建议将不胜感激,非常感谢!

【问题讨论】:

    标签: python django django-orm django-1.8


    【解决方案1】:
    User.objects.filter(user_type=type).values('id').annotate(total_time=Sum(useraction__time))
    

    【讨论】:

      猜你喜欢
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      相关资源
      最近更新 更多