Django - агрегаты Суммы в postgreSQL не используют DISTINCT.Это ошибка? - PullRequest
3 голосов
/ 04 ноября 2010

Это ошибка?Я не очень хорошо разбираюсь в SQL, но похоже, что агрегатная функция не учитывает значение Different (), переданное в набор запросов.

distinct_queryset = MyModel.objects.filter(reverse_relationship__icontains='foo').distinct()

iterated_total = 0
for item in distinct_queryset:
    iterated_total += item.total

aggregate = queryset.aggregate(Sum('total'))

aggregate is Decimal('42201.20')

iterated_total is Decimal('38212.20')

aggregate is not total

1 Ответ

1 голос
/ 07 февраля 2011

Обновление:

Я наконец протестировал его с помощью debug = true и connections.queries.

на somequery.distinct() Я получаю:
'sql': 'SELECT DISTINCT ............ WHERE....LIKE FOO

в совокупности различных наборов запросов, которые я получаю:
'sql': 'SELECT .......... WHERE...LIKE FOO

После поиска в Google я нашел http://groups.google.com/group/django-users/browse_thread/thread/87cc286019c7d57c

Мне удалось так:

подзапрос = Father.objects.filter (sons_in = [адам, Bernard]) Father.objects.filter (pk_in = подзапрос) .aggregate (Sum ( 'возраст'))

Это дает правильный результат. Есть ли лучший способ сделать это? (может быть, более эффективный?)

Я буду продолжать добавлять через Python из моего интуиции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...