2016-05-12 135 views
5

在我的django應用程序中,我有一組捐贈,我想對其進行統計。對於每次捐贈,一個人都與他的電子郵件地址相關聯。Django queryset group by和count的區別

我想計算每個月的捐助者數量,即唯一的電子郵件地址的數量。

到目前爲止,我有:

# 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

是否使用Postgres的? – Sayse

+0

是的,我會在問題中加上這個。 – nobe4

回答

5

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

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