Django - Группировать по и делать ArrayAgg
У меня есть модель:
class Deviation(models.Model):
deviation_number = models.SmallIntegerField()
day_of_calculation = models.SmallIntegerField()
Я хотел бы сгруппировать записи модели по day_of_calculation
и получить список deviation_number
s:
deviations = Deviation.objects \
.values('day_of_calculation') \
.annotate(deviation_numbers=ArrayAgg('deviation_number'))
Но Django неправильно создает sql:
SELECT "deviation"."day_of_calculation", ARRAY_AGG("deviation"."deviation_number" ) AS "deviation_numbers" FROM "deviation" GROUP BY "deviation"."day_of_calculation", "deviation"."deviation_number"
Группировка по deviation_number
не должна происходить.
Что я делаю не так?
Вам следует добавить .order_by(…)
пункт [Django-doc] для принудительного GROUP BY
на полях, перечисленных в .order_by(…)
, так:
Deviation.objects.values('day_of_calculation').annotate(
deviation_numbers=ArrayAgg('deviation_number')
).order_by('day_of_calculation')