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
1 个回答
3
我猜你的结果中缺少了组标识符(a1_group
)。而且(如果我理解你的模型没错的话),你需要在查询中为a1_loc
这一列也添加一个group by
的条件:
编辑-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)