2016-05-12 1 views
5

В моем приложении django у меня есть набор пожертвований, на которые я хочу сделать статистику. Для каждого пожертвования человек связан с его адресом электронной почты.Django queryset group by and count distincts

Я хочу вычислить на каждый месяц количество доноров, то есть число уникальных аддитов.

До сих пор у меня есть:

# 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') 

 Смежные вопросы

  • Нет связанных вопросов^_^