【问题标题】:how to group_by a query by date and sum 2 others fields如何按日期分组查询并总结其他 2 个字段
【发布时间】:2017-10-22 22:02:16
【问题描述】:

我的模型如下所示:

class PostMetric(models.Model):
    likes = models.IntegerField()
    comments = models.IntegerField()
    created_at = models.DateTimeField(auto_now_add=True)

我想获得每天的喜欢和 cmets 的总和(请注意,我需要将 datetimefield 转换为 datefield(可能使用 Cast?):

   date       engagement (likes+comments)
 2/5/2017         26
 3/5/2017         29

我尝试使用:Cast、annotate、aggregation 甚至 rawsql 和 extra/select 函数,但没有成功。

我认为我需要添加基于此查询的聚合:

PostMetric.annotate(engagement=Sum('likes') + Sum('comments')).annotate(date_only=Cast('created_at', DateField()))

【问题讨论】:

  • 请张贴你最好的照片
  • @e4c5 : 我编辑了我的帖子
  • 阅读此doc
  • 感谢@Gahan 的建议,但在阅读本文之前我不会问

标签: sql django postgresql django-models django-orm


【解决方案1】:

如果您想模拟 group_by 查询,则可以使用 .values 方法。

PostMetric.objects.values('created_at').annotate(engagement=Count('likes')+Count('comments')

【讨论】:

  • 谢谢,我用过它,它可以工作:PostMetric.objects.filter(my_filter).annotate(date_only=TruncDay('created_at')).values('date_only').annotate(engagement=Sum('likes') + Sum('comments'))
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 2020-11-19
  • 1970-01-01
相关资源
最近更新 更多