【发布时间】:2020-07-06 21:56:07
【问题描述】:
我想用 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 查询
EmpSalary.objects.values('depname', 'empno', 'salary', 'enroll_date').annotate(
pos= Window(
expression=RowNumber(),
partition_by=[F('depname')],
order_by=F('salary').desc(),
)
)
上面的ORM查询集大致翻译为内部查询
SELECT depname, empno, salary, enroll_date,
rank() OVER (PARTITION BY depname ORDER BY salary DESC) AS pos
FROM empsalary
我想知道如何在外部查询的 FROM 子句中获取整个内部查询。
【问题讨论】:
-
不用加
.filter(pos__lt=3)吗? -
它不起作用...给出一个异常窗口表达式不可过滤。
-
你找到不包含第三方包的解决方案了吗?
标签: django postgresql django-models django-rest-framework django-orm