Я искал лучший способ использовать аннотацию подзапроса и Avg, но не мог его понять. Это то, что у меня есть на данный момент, и это работает, давая мне среднее количество сотрудников на компанию, но это уродливо.
companies = Company.objects.all()
for company in companies:
salary = []
for emp in company.comp_emp.all():
salary.append(emp.salary)
print(sum(salary) / len(salary))
>>> 99054.4
>>> 96403.75
>>> 498351.375
Я попробовал следующее, но не пошел,
companies = Employee.objects.filter(company=OuterRef('pk'))
employee_count = Company.objects.annotate(avg_emp_salary=Avg(Subquery(companies.values('salary')[:])))
>>> 46907.0
>>> 147288.0
>>> 43158.0
Значения, которые я получаю, неверны, но я также не могу понять, откуда они берутся. Это просто для моих собственных учебных целей.
Заранее спасибо.
1 ответ
Я думаю, что использование подзапроса здесь излишне. Для этого можно использовать более простой синтаксис.
companies = Company.objects.annotate(avg_emp_salary=Avg('employee__salary'))
Похожие вопросы
Новые вопросы
django
Django - это серверная платформа веб-приложений с открытым исходным кодом, написанная на Python. Он разработан для сокращения усилий, необходимых для создания сложных веб-сайтов и веб-приложений, управляемых данными, с особым упором на меньшее количество кода, отсутствие избыточности и более явное, чем неявное.