Хорошо, я пытаюсь создать restAPI для отслеживания статистики покера, используя Flask и SQLAlchemy.В БД есть 3 таблицы: «Игроки», «Игры» и «Значения», где таблицы значений используются для объединения игроков и игр.(Класс значений показан ниже)
Я застрял, пытаясь написать метод, который определит, какой игрок получит наибольшую прибыль во всех играх, в которые он играл.(чтобы было понятно, я хочу, чтобы метод возвращал идентификатор игрока и сумму прибыли)
На бумаге это можно сделать следующим образом:
- Для каждой записи в таблице значений, вычислите значение прибыли от бай-инов и выкупов.
- Для каждого идентификатора игрока суммируйте все значения прибыли
- Выберите наибольшее суммарное значение прибыли и верните как значение прибыли, так и идентификатор игрока.
Показанный ниже код метода дает мне большую часть пути, но я не могу сделать последний шаг.В настоящее время результат подзапроса2 является самой высокой суммой прибыли, но я не могу получить это, чтобы вернуть идентификатор игрока, связанный с ним.Чувствую, что я должен быть довольно близко.Любая помощь приветствуется.Приветствия.
Код класса:
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()