Python Sqlalchemy子查询

时间:2019-03-11 15:40:58

标签: python sqlalchemy

好吧,所以我试图建立一个restAPI来使用Flask和SQLAlchemy来跟踪扑克统计数据。该数据库具有3个表:玩家,游戏和值,其中的值表用于将玩家和游戏联系在一起。 (值类别如下所示)

我一直坚持尝试编写一种方法,该方法可以计算出在所有已玩游戏中哪个玩家的利润最高。 (很明显,我希望该方法返回玩家ID和利润金额)

在纸上,这可以通过以下方式完成:

  1. 对于价值表中的每个条目,通过买入和买入计算利润值。
  2. 对于每个玩家ID,将所有获利值相加
  3. 选择最高的总利润值,然后返回利润值和玩家ID。

下面显示的方法代码为我提供了大部分帮助,但我走不了最后一步。目前,子查询2的结果本身就是最高的利润金额,但是我无法获得它来返回与其关联的玩家ID。 感觉我一定很接近。任何帮助表示赞赏。干杯。

类代码:

class Value(db.Model):

    __table_args__ = (db.UniqueConstraint('game_id', 'player_id', name='One_value_per_player_per_game'),)

    id = db.Column(db.Integer, primary_key=True)
    player_id = db.Column(db.Integer, db.ForeignKey('player.id'), nullable=False)
    game_id = db.Column(db.Integer, db.ForeignKey('game.id'), nullable=False)
    buy_in_amount = db.Column(db.Float, nullable=False)
    buy_out_amount = db.Column(db.Float, nullable=False)

方法代码:

subquery = Value.query.with_entities(Value.player_id.label('id'), 
func.sum(Value.buy_out_amount - Value.buy_in_amount).label('total_profit')).group_by(Value.player_id).subquery()

subquery2 = Value.query.with_entities(func.Max(subquery.c.total_profit)).all()

0 个答案:

没有答案