如何在django ORM中的From子句中编写子查询
我想用django orm编写这个查询如何在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查询集大致转换
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')