繁体   English   中英

Sqlalchemy:如何与自身进行外部联接?

[英]Sqlalchemy: How to perform outer join with itself?

我想使用Sqlalchemy(带有模型评估)执行此SQL查询:

select e1.user, sum(e1.points) as s from
   (select e1.*
    from evaluations e1 left outer join evaluations e2
    on (e1.user = e2.user and e1.module = e2.module and e1.time < e2.time)
    where e2.user is null and e1.module in (__another subquery__))
group by e1.user order by s limit 5

我不知道如何执行左外部联接(特别是重命名的列的重命名和引用)。 你可以帮帮我吗?

# sample sub-query for testing
_another_query = session.query(Evaluation.module).filter(Evaluation.module > 3)

# define aliases
E1 = aliased(Evaluation, name="e1")
E2 = aliased(Evaluation, name="e2")

# inner query
sq = (
    session
    # .query(E1)
    # select columns explicitely to control labels
    .query(E1.user.label("user"), E1.points.label("points"))
    .outerjoin(E2, and_(
        E1.user == E2.user,
        E1.module == E2.module,
        E1.time < E2.time,
    ))
    .filter(E2.user == None)
    .filter(E1.module.in_(_another_query))
)
sq = sq.subquery(name="sq")

# now lets group by
q = (
    session
    .query(sq.c.user, func.sum(sq.c.points))
    .group_by(sq.c.user)
    .order_by(func.sum(sq.c.points))
    .limit(5)
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM