У меня есть две таблицы:
class Records(db.Model):
year = db.Column(db.Integer, nullable=False)
team_id = db.Column(db.Integer, nullable=False)
owner_id = db.Column(db.String, nullable=False)
wins = db.Column(db.Integer, nullable=False)
losses = db.Column(db.Integer, nullable=False)
db.PrimaryKeyConstraint(year, team_id, name="records_year_team_id_pkey")
class Champions(db.Model):
year = db.Column(db.Integer, nullable=False)
owner_id = db.Column(db.String, nullable=False)
db.PrimaryKeyConstraint(year, name="champions_year_pkey")
Я пытаюсь преобразовать этот запрос в эквивалент ORM:
select
r.owner_id,
sum(r.wins) as wins,
sum(r.losses) as losses,
round(sum(r.wins)::decimal/(sum(r.wins)+sum(r.losses)), 4) as win_percentage,
(select count(1) from champions where owner_id = r.owner_id) as championships
from
records r
group by
r.owner_id
order by
win_percentage desc;
Это то, что я пока имею, но не знаю, каксделать часть подзапроса:
standings = db.session \
.query(Records.owner_id.label("owner_id"),
func.sum(Records.wins).label("wins"),
func.sum(Records.losses).label("losses"),
(func.sum(cast(Records.wins, Numeric)) / (func.sum(Records.wins) + func.sum(Records.losses))).label("win_percentage"),
func.count(1).filter(Champions.owner_id == Records.owner_id)) \ # not correct
.group_by(Records.owner_id) \
.order_by(desc("win_percentage")) \
.all()
Каким будет эквивалент ORM для подзапроса?
(select count(1) from champions where owner_id = r.owner_id) as championships