От MySQL documentation:
В стандартном SQL, запрос, который включает в себя предложения GROUP BY не может ссылаться на неагломерированных столбцов в списке выбора, которые не названы в предложение GROUP BY.
Это означает, что единственный способ достичь того, что вы хотите в одном запросе, - использовать инструкцию OUTER JOIN
. Насколько я знаю, Django ORM не поддерживает OUTER JOIN
операторов из таблицы.
Единственный способ получить то, что вы хотите (список всех моделей, в том числе идентификатор, с подсчетом количества событий для каждого уникального имени), помимо использования необработанного оператора SQL, заключается в использовании 2 отдельных запросов и обрабатывать их в Python.
Я действительно удивляюсь, если вы не хотели использовать SUM
вместо COUNT
. COUNT
добавляет 1 для каждого значения NON-NULL
, включая 0
, а SUM
добавляет фактические числовые значения в столбце.
Во всяком случае, пример будет выглядеть следующим образом:
qs = Foo.objects.values('name').annotate(count=Count('id')) # or sum=Sum('score')
count = dict((x['name'], x['count']) for x in qs)
object_list = Foo.objects.all()
for foo in object_list:
foo.count = count['name']
Какие СУБД? Кажется, что MySQL поддерживает выбор столбцов не в 'GROUP BY'. – Yang
Можете ли вы предоставить нам образцы данных и ожидаемый результат? – Parado
отбросить столбец id из инструкции select ... здесь это бессмысленно. – Orangepill