Django Query Count group by

时间:2016-03-23 08:18:31

标签: python mysql django

我已阅读此主题: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

NOT 工作。 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'))

对我有用!

2 个答案:

答案 0 :(得分:0)

您应指定分组字段。在此示例中,注释将按标记分组:

  

Note.objects.filter(用户=用户).values('标签&#39)。注释(计数(' ID'))

答案 1 :(得分:0)

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

/var/run/nginx/nginx.pid

这将返回按标签分组的确切笔记数。

我建议您使用POSTGRESQL,而MySQL则允许您更轻松地执行此操作:

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