Django Подзапрос Средняя зарплата сотрудника на компанию - PullRequest
0 голосов
/ 21 апреля 2020

Я искал лучший способ, используя аннотацию Subquery и 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

Я пробовал следующее, но без go,

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 Ответ

0 голосов
/ 21 апреля 2020

Я думаю, что использование Subquery здесь немного излишне. Для этого вы можете использовать более простой синтаксис.

companies = Company.objects.annotate(avg_emp_salary=Avg('employee__salary'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...