2011-12-29 2 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

에 의문을 또한 (I 올바르게 모델을 이해하고 주어진), 당신은 에 필요 a1_loc 열의 또한 group by 절을 추가 ** 작동하지 않음 ** 오류 : 실행 오류 또는 잘못된 결과 생성? 데이터 구조와 원하는 결과가 더 무엇인지에 대해 설명하면 도움이 될 것입니다 ... 또는 직접 'SQL'쿼리를 작성하는 방법을 알고 있다면 누군가가 SA 쿼리로 변환 할 수 있습니다. ... – van

답변

3

내가 방금 결과에서 그룹 식별자 (a1_group를) 누락 추측 것입니다.

편집-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