如何在django ORM中的From子句中编写子查询

如何在django ORM中的From子句中编写子查询,django,postgresql,django-models,django-rest-framework,django-orm,Django,Postgresql,Django Models,Django Rest Framework,Django Orm,我想用django orm编写这个查询 SELECT depname, empno, salary, enroll_date FROM (SELECT depname, empno, salary, enroll_date, rank() OVER (PARTITION BY depname ORDER BY salary DESC) AS pos FROM empsalary ) AS ss WHERE pos < 3; 上面的ORM查询集大致转换

我想用django orm编写这个查询

SELECT depname, empno, salary, enroll_date
FROM
  (SELECT depname, empno, salary, enroll_date,
          rank() OVER (PARTITION BY depname ORDER BY salary DESC) AS pos
     FROM empsalary
  ) AS ss
WHERE pos < 3;
上面的ORM查询集大致转换为内部查询

SELECT depname, empno, salary, enroll_date,
          rank() OVER (PARTITION BY depname ORDER BY salary DESC) AS pos
     FROM empsalary

我想知道如何在外部查询的FROM子句中获得整个内部查询。

实际上,在
WHERE
子句中使用
窗口
查询是不可能的。因此,请使用
子查询

from django.db.models import OuterRef, Subquery

top_salaries = EmpSalary.objects.filter(
    depname=OuterRef('depname')
).order_by('-salary')[:3]
result = EmpSalary.objects.filter(
    pk__in=Subquery(top_salaries.values('pk'))
).values('depname', 'empno', 'salary', 'enroll_date')

您不需要添加
.filter(pos\uu lt=3)
?它不起作用。。。出现异常windows表达式不可筛选。请检查此操作是否正常。子查询放在外部查询的WHERE子句中。子查询是否有一种方式进入FROM子句?
from django.db.models import OuterRef, Subquery

top_salaries = EmpSalary.objects.filter(
    depname=OuterRef('depname')
).order_by('-salary')[:3]
result = EmpSalary.objects.filter(
    pk__in=Subquery(top_salaries.values('pk'))
).values('depname', 'empno', 'salary', 'enroll_date')