2011-12-29 63 views
1

我想選擇一個分組的平均值。查詢中的SQL Alchemy 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 2011-12-29 12:45:17

回答

3

我猜想,你只是缺少在結果組標識符(a1_group)。同時,(給我正確理解你的模型),你需要添加group by條款也爲a1_loc列:

編輯-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 2011-12-29 13:16:50