SQL Alchemy 查询中的 group_by

1 投票
1 回答
1455 浏览
提问于 2025-04-17 09:12

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

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)

撰写回答