在我的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。
如何做到这一点?
答案 0 :(得分:5)
Count
需要distinct
argument,所以你可以这样做:
donors = qs.values('month').annotate(count=Count('email', distinct=True)).order_by('month')