Python Sqlalchemy Subquery - PullRequest
       1

Python Sqlalchemy Subquery

0 голосов
/ 11 марта 2019

Хорошо, я пытаюсь создать restAPI для отслеживания статистики покера, используя Flask и SQLAlchemy.В БД есть 3 таблицы: «Игроки», «Игры» и «Значения», где таблицы значений используются для объединения игроков и игр.(Класс значений показан ниже)

Я застрял, пытаясь написать метод, который определит, какой игрок получит наибольшую прибыль во всех играх, в которые он играл.(чтобы было понятно, я хочу, чтобы метод возвращал идентификатор игрока и сумму прибыли)

На бумаге это можно сделать следующим образом:

  1. Для каждой записи в таблице значений, вычислите значение прибыли от бай-инов и выкупов.
  2. Для каждого идентификатора игрока суммируйте все значения прибыли
  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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...