我正在尝试选择分组平均值。
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
答案 0 :(得分:3)
我猜你在结果中只缺少组标识符(a1_group
)。另外(鉴于我理解您的模型正确),您需要为group by
列添加a1_loc
子句:
edit-1:由于问题规定而更新了查询
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)