在Query中的SQLAlchemy组

时间:2011-12-29 12:36:28

标签: python sqlalchemy

我正在尝试选择分组平均值。

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 个答案:

答案 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)