【问题标题】:Django Query Count group byDjango查询计数组
【发布时间】:2016-03-23 08:18:31
【问题描述】:

我已阅读此主题:Django query: Count and Group BY 并阅读 django queryset doc

我找到了两种实现 SQL 的方法COUNT GROUP BY

(1)distinct

note_list = Note.objects.filter(user=user).order_by('tag').values('tag').distinct()
for note in note_list:
    print note

为我工作。

(2)annotate

qs = Note.objects.filter(user=user).annotate(Count('tag')) 
for e in qs:
    print e.tag__count

没有工作。 count 总是1

当我使用distinct 而不是order_by 时,它也不起作用。我试过其他方法,也没有用。

django 版本:1.8

MySQL 版本:5.6.29

更新:

Note.objects.filter(user=user).order_by('tag').values('tag').annotate(count=Count('tag'))

为我工作!

【问题讨论】:

    标签: python mysql django


    【解决方案1】:

    您应该指定用于分组的字段。在本例中,笔记将按标签分组:

    Note.objects.filter(user=user).values('tag').annotate(Count('id'))

    【讨论】:

    • Note.objects.filter(user=user).values('tag').annotate(Count('tag')) 之前试过,效果不好。
    【解决方案2】:

    也许你还没有尝试过,但是还有另一种方法可以做到这一点,使用 .count() 方法(例如https://docs.djangoproject.com/en/1.9/ref/models/querysets/#count

    Note.objects.filter(user=user).order_by('tag').distinct().count()
    

    这将返回按标签分组的确切音符数量。

    我建议你使用 POSTGRESQL 而 MySQL,它允许你做类似的事情,更容易:

    Note.objects.filter(user=user).distinct('tag').count()
    

    【讨论】:

      猜你喜欢
      • 2011-01-29
      • 2019-09-11
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      • 2011-09-01
      • 2016-03-23
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多