首页 > 解决方案 > 如何结合子查询、最大记录的排序和分组?

问题描述

我有下表用于记录每场比赛的运动员指标:

class MatchResult(Base):
    __tablename__ = 'match_result'
    id = Column(Integer, primary_key=True)
    p1_id= Column(Integer, index=True)
    p1_metric = Column(Float)
    p2_id= Column(Integer, index=True)
    p2_metric = Column(Float)

我想获得每个唯一玩家 ID(无论是 p1 还是 p2)的最大指标,并按指标排序。

据我所知:

p1 = session.query(
    MatchResult.p1_id.label("player_id"),
    MatchResult.p1_metric.label("metric")
).subquery()
p2 = session.query(
    MatchResult.p2_id.label("player_id"),
    MatchResult.p2_metric.label("metric")
).subquery()
union = p1.union(p2)
upset = session.query(
    union.c.player_id,
    func.max(union.c.metric).label("max_metric")
)
upset = upset.group_by(union.c.player_id)
upset = upset.order_by(union.c.max_metric)

但是我遇到了一个问题,我无法合并两个子查询,所以我得到了错误:

AttributeError: 'Alias' object has no attribute 'union'

我将如何解决这个问题?

标签: pythonsqlalchemy

解决方案


推荐阅读