2016-04-05 15 views
0

私は最初のグループのために、以下の使用を開始、次のSQLコードフラスコSQLAlchemyのグループ

select right_team_id team_id 
,sum(score)-sum(deductions) score from (
    select left_team_id, right_team_id 
    ,1.0*sum(case when right_win then 1 else 0 end)/count(*) score 
    ,1.0*sum(right_deductions)/2 deductions 
    from races 
    group by left_team_id, right_team_id) A 
group by right_team_id 

と同等ですフラスコSQLAlchemyの中でグループ2つのレベルでクエリを作成したいです

query = Races.query.group_by(Races.left_team_id, Races.right_team_id) 
.add_columns(func.sum(Races.left_deductions).label('deductions') 
,func.sum(case([(Races.left_win, 1)], else_ = 0)).label('wins') 
,func.count().label('races')) 

ただし、クエリの各レコードは、次のとおりです。(<flaskapp.races.models.Races object at 0x107c5f358>, 0, 0, 1)。最後の集計列を含め、クエリ別に別のグループを実行するにはどうすればよいですか?

おかげ

答えて

0

デシベルを持っていない、またはどのような根本的なスキーマが、これは検証することが困難です。さらに、元のSQLクエリとsqlalchemyクエリはかなり異なっています。しかし、サブクエリを使ってこれに近づくことはうまくいくと思います。

subq = db.session.query(Races.right_team_id.label('right_team_id'), 
      (func.sum(case([(Races.right_win, 1)], else_ = 0))/func.count(Races.id)).label('score'), 
      (func.sum(right_deductions)/2).label('deductions')).group_by(Races.left_team_id, Races.right_team_id).subquery() 

q = db.session.query(Races.right_team_id, func.sum(subq.c.score)-func.sum(subq.c.deductions)).\ 
join(subq, subq.c.right_team_id==Races.right_team_id).group_by(Races.right_team_id) 
+0

ありがとうございます。サブクエリは、私が行方不明だったコマンドでした。 –

関連する問題