2011-12-29 11 views
1

グループ平均を選択しようとしています。クエリのSQL錬金術group_by

a1_avg = session.query(func.avg(Table_A.a1_value).label('a1_avg'))\ 
     .filter(between(Table_A.a1_date, '2011-10-01', '2011-10-30'))\ 
     .group_by(Table_A.a1_group) 

私はこのクエリのいくつかの異なる反復を試みましたが、これは私が必要とするものに近づけることができます。 group_byが問題を作成していることはかなり確信していますが、SQLAを使用してクエリを正しく実装する方法がわかりません。テーブル構造と予想される出力:

TABLE A 
A1_ID | A1_VALUE | A1_DATE | A1_LOC | A1_GROUP 
1  | 5  | 2011-10-05 | 5  | 6  
2  | 15  | 2011-10-14 | 5  | 6 
3  | 2  | 2011-10-21 | 6  | 7 
4  | 20  | 2011-11-15 | 4  | 8 
5  | 6  | 2011-10-27 | 6  | 7 

EXPECTED OUTPUT 
A1_LOC | A1_GROUP | A1_AVG 
5  | 6  | 10 
6  | 7  | 4 
+2

にクエリを更新します**動作していない**:エラーが発生しているか、間違った結果が出る?あなたのデータ構造と望みの結果が何であるかをもっと説明してもらえれば助かります。あるいは、直接の 'SQL'クエリをどのように構築するのか分かっていれば、誰かがそれをSAクエリに翻訳してくれるでしょう... – van

答えて

3

私はあなただけの結果でグループ識別子(a1_group)が欠けていることを推測します。また、あなたは、(私が正しくあなたのモデルを理解与えられる)への必要性をa1_loc列に対してもgroup by句を追加します。

編集-1:による質問specificaionそれがどのように

a1_avg = session.query(Table_A.a1_loc, Table_A.a1_group, func.avg(Table_A.a1_value).label('a1_avg'))\ 
     .filter(between(Table_A.a1_date, '2011-10-01', '2011-10-30'))\ 
     #.filter(Table_A.a1_id == '12')\ # @note: you do NOT NEED this 
     .group_by(Table_A.a1_loc)\ # @note: you NEED this 
     .group_by(Table_A.a1_group) 
+0

驚くばかり!私は何かをとても単純に考えすぎていることを知っていたはずです。ありがとう! – etangman

関連する問題