Немного трабла с GROP BY и SUM Django ORM делает этот запрос:
"SELECT "p_record"."h", SUM("p_record"."size") AS "size__sum" FROM "p_record" GROUP BY "p_record"."h", "p_record"."size" ORDER BY "p_record"."size" DESC LIMIT 15"
когда я делаю
record.objects.all().values('h').annotate(Sum('size')).order_by('-size')[:15]
или же
record.objects.all().values('h').order_by('h').annotate(Sum('size')).order_by('-size')[:15]
НО 'h' не сгруппированы! Где я пропустил ошибку? протестировано на sqlite и postgres. Django 10.6
есть результат:
.
h: size:
<li>"aa.ss.aa" = 15</li>
<li>"aa.dd.aa" = 2</li>
<li>"aa.ss.aa" = 4</li>
<li>"zz.aa.cc" = 9</li>
<li>"aa.ss.aa" = 9</li>так что я могу сделать для группы только "h"?
удалить size из order_by
а как отсортировать по размеру все суммировать?
Дайте название агрегату: annotate(size=Sum('size')).order_by('size')
Также небольшое уточнение: приведенная выше цитата касается distinct. Но чуть дальше в документах говорится: Точно так же, если вы используете запрос values () для ограничения выбранных столбцов, столбцы, используемые в любом порядке order_by () (или порядке модели по умолчанию), все равно будут задействованы и могут повлиять на уникальность результатов.
wolfrevokcats omg, это последнее, что я не пробовал! Спасибо, теперь работа.





Это работа
record.objects.all().values('h').annotate(sumsize=Sum('size')).order_by('-sumsize')[:15]
суммируется по 'h' и сортируется по размеру суммы
Из документации: любые поля, используемые в вызове order_by (), включаются в столбцы SQL SELECT.