2016-11-16 2 views
0

Мне нужно подсчитать элементы из таблицы. Проблема в том, что у меня есть решение для этого, но я использую функцию, которая удаляет дубликаты из таблицы, а затем я могу получить счет без проблем (но это требует времени для обработки). Это пример моей модели/таблица:Подсчитать данные из таблицы, исключая дубликаты

enter image description here

Если я отсчет от этого я получаю следующий результат: 3 погружено, 4 выделены, 2 Нет статуса, 1 Loaded.

Мне нужно получить следующий результат: 2 отправлено (игнорируется 1 дубликат), 1 выделено (игнорируется 3 дубликата), 2 нет статуса (дубликат отсутствует), 1 загружен.

Спасибо за ваше время,

+0

Можете ли вы поделиться тем, что вы пробовали и что сделали? Нам будет легче ответить, когда мы узнаем, как данные считываются и сохраняются. – nbryans

ответ

1

Если вы используете PostgreSQL вы можете использовать следующие использовать DISTINCT ON

Model.objects.order_by('field').dictinct('field').count() 

Если вы используете MySQL вы можете использовать

Model.objects.order_by('field').aggregate(count=Count('field', distinct=True))['count'] 

Вы необходимо, чтобы order_by поле вы переходите на отчетливый, there is more information in the docs

+0

Итак, в качестве примера, если я хочу подсчитать, сколько отправленных я основал на их SOSS, запрос модели должен быть: Model.objects.order_by ('Shipped'). Aggregate (count = Count ('Shipped', distinct = Правда)) ['count']? или я объявляю пропустить дублируемую SOSS. – Deluq

+1

Вы бы сделали 'Model.objects.filter (status = 'Shipped'). Order_by ('soss'). Aggregate (count = Count ('soss', distinct = True)) ['count']' –

+0

Я получение ошибки с этим после агрегата – Deluq