(В то время, когда были даны предыдущие ответы, у django еще не было функциональности подзапроса.)

ужно получить список записей для следующей таблицы с различными значениями в отношении имени:

Class C:

name                value
A ------------------ 10
A ------------------ 20
A ------------------ 20
B ------------------ 50
C ------------------ 20
D ------------------ 10
B ------------------ 10
A ------------------ 30

Мне нужно избавиться от всех повторяющихся значений для имени и показать только следующее:

name                value
A ------------------ 30
B ------------------ 10
C ------------------ 20
D ------------------ 10

Как видите, это выглядит почти как набор питонов. Я, вероятно, могу сгенерировать набор с помощью Python, но мне интересно, есть ли в Django ORM эта функция.

Я попытался использовать разные, но он не принимает никаких аргументов, чтобы указать, какой столбец должен иметь разные значения. Есть идеи, как заставить этот запрос работать?

 mohi66618 янв. 2011 г., 12:35
Либо первый, либо последний.
 Sam Dolan18 янв. 2011 г., 16:42
Ну, вы должны выбрать один, потому что первое и последнее значения разные. Вы действительно хотите произвольную случайность?
 mohi66619 янв. 2011 г., 02:53
Мне действительно нужно последнее значение. Но для этого примера я поставил первый, так как думал, что разницы нет.
 Daniel Roseman18 янв. 2011 г., 12:18
Вы просто хотите первое значение для каждого имени или как?

Ответы на вопрос(3)

чениям. Чтобы различать одно имя столбца, например: 'url', чтобы получить все уникальные URL из таблицы, а также получить остальные данные, используйте подзапрос.

Подзапрос получает идентификаторы URL-адресов, а затем использует их для выполнения другого запроса по этим идеям. Это не так быстро, как обычный курс, конечно.

link_ids = (
    Resources
    .values('url')
    .distinct()
    .annotate(
        occurrences=Count('url'),  # make unique 'urls' only occur once.
        pk=Min('pk')  # return pk of first occurrence
    )
)
broken_links_qs = (
    Resources.filter(id__in=Subquery(link_ids.values('pk')))
)

(В то время, когда были даны предыдущие ответы, у django еще не было функциональности подзапроса.)

queryraw = C.objects.raw('SELECT name, value FROM prj_c GROUP BY name')

или добавьте ORDER BY, чтобы иметь более высокое значение для любой группы:

queryraw = C.objects.raw('SELECT name, value FROM prj_c GROUP BY name ORDER BY value')

В любом случае вы можете иметьlist() объектов.

Полезная документация здесь:https://docs.djangoproject.com/en/2.0/topics/db/sql/

.distinct() это инструмент, но вот синтаксис, который я должен был использовать:

Таким образом, вы получите только список [A, B, C, D] значений, а не объекты, которые они сами себе выбирают.

 dbn14 нояб. 2013 г., 02:49
@SerafimS. Это работает в MySQL и SQLite. делаотличается от не работает PostgreSQL, но запрос в этом ответе не делает ничего особенного!
 Serafim Suhenky10 мая 2013 г., 20:55
Это будет работать только с PostgreSQL. Если вы используете MySQL или SQLite, вам не повезло.

Ваш ответ на вопрос