Я предполагаю, что столбец (не отношение), который вы используете для объединения, называется Score.user_id, поэтому измените его, если это не так.
Вам нужно будет сделать что-то вроде этого:
DBSession.query(Score.user_id, func.sum(Score.score_amount).label('total_score')).group_by(Score.user_id).filter(Score.created > somedate).order_by('total_score DESC')[:10]
Однако это приведет к кортежу (user_id, total_score). Я не уверен, что вычисленная оценка действительно важна для вас, но если это так, вы, вероятно, захотите сделать что-то вроде этого:
users_scores = []
q = DBSession.query(Score.user_id, func.sum(Score.score_amount).label('total_score')).group_by(Score.user_id).filter(Score.created > somedate).order_by('total_score DESC')[:10]
for user_id, total_score in q:
user = DBSession.query(User)
users_scores.append((user, total_score))
Однако это приведет к выполнению 11 запросов. Все это можно сделать одним запросом, но из-за различных ограничений в SQLAlchemy он, вероятно, создаст очень уродливый запрос или подзапрос с несколькими объединениями (зависит от механизма) и не будет очень производительным.
Если вы планируете делать что-то подобное часто и у вас большое количество баллов, подумайте о денормализации текущего балла в таблицу пользователей. Это больше работы для поддержки, но приведет к одному не присоединяющемуся запросу, как:
DBSession.query(User).order_by(User.computed_score.desc())
Надеюсь, это поможет.