Python Sqlalchemy ORM在一条语句中按两次/子查询分组
我尝试将以下SQL语句转换为sqlalchemy ORM查询:Python Sqlalchemy ORM在一条语句中按两次/子查询分组,python,sqlalchemy,orm,Python,Sqlalchemy,Orm,我尝试将以下SQL语句转换为sqlalchemy ORM查询: select name, max(pnl) from ( select name, filedate, sum(pnl) as pnl from portfolio where filedate>="2020-01-01" group by filedate, name ) maxg group by name 我似乎无法将其转换为ORM查
select name, max(pnl) from
(
select name, filedate, sum(pnl) as pnl from portfolio
where filedate>="2020-01-01"
group by filedate, name
) maxg
group by name
我似乎无法将其转换为ORM查询,这是我迄今为止尝试过的,构建内部子查询,但我似乎无法为外部查询构建ORM查询。是否有办法为内部子查询别名,以便我可以继续引用字段
from sqlalchemy import func
session.query(
Entity.name, Entity.filedate, func.sum(Entity.pnl).label("pnl"))
.filter(Entity.filedate >= datetime.date(2020,1,1))
.group_by(Entity.filedate, Entity.name)
)
如果有人有同样的问题,这为我解决了这个问题,尽管这是一个丑陋的实现。可以使用
subquery()
创建子查询,并通过subquery.c.{columnname}
# Subquery
sq = session.query(
Entity.name, Entity.filedate, func.sum(Entity.pnl).label("pnl"))
.filter(Entity.filedate >= datetime.date(2020,1,1))
.group_by(Entity.filedate, Entity.name)
).subquery()
session.query(sq.c.name, func.max(sq.c.pnl))
.group_by(sq.c.name).all()