Django queryset group by和count的区别

时间:2016-05-12 09:11:22

标签: python django django-models django-queryset

在我的django应用程序中,我有一组捐款,我想对其进行统计。对于每次捐赠,一个人都与他的电子邮件地址相关联。

我想计算每个月捐助者的数量,即唯一的电子邮件地址数。

到目前为止,我有:

# filter all donations by month
truncate_date = connection.ops.date_trunc_sql('month', 'date')
qs = Donation.objects.extra({'month': truncate_date})

# group by months and annotate each with the count of emails
donors = qs.values('month').annotate(count=Count('email')).order_by('month')

这很有效,我收到了所有电子邮件捐赠者的月度报告,但由于我在电子邮件中有重复,因此不会按唯一值过滤电子邮件。

当前使用的数据库是Postgresql。

如何做到这一点?

1 个答案:

答案 0 :(得分:5)

Count需要distinct argument,所以你可以这样做:

donors = qs.values('month').annotate(count=Count('email', distinct=True)).order_by('month')