이름별 코드의 평균을 over()로 구하고 나서
이름 a의 2, b의 4, c의 1을 합한 총합 7을 포함해서 출력 하려고
sum over를 사용했더니 전체 row의 합인 15가 출력이됩니다.
그래서 각 이름별 평균의 최대값을 구하면 하나씩 추출될테니 그렇게 해서 합하면 되겠다 싶어
sum()과 max()를 섞어서 over했더니
윈도우 함수를 사용할 수 없다는 오류가 나오네요...
이리 저리 고민을 해봐도 좋은 방법이 떠오르지 않아 조언을 구해봅니다.
이름 | 코드 | 코드 별 점수 | 이름별 평균 | 총합 |
a | 1 | 1 | 2 | 7 |
a | 2 | 2 | 2 | 7 |
a | 3 | 3 | 2 | 7 |
b | 4 | 3 | 4 | 7 |
b | 5 | 5 | 4 | 7 |
c | 6 | 1 | 1 | 7 |
WITH T (이름,코드,코드별점수,이름별평균,총합) AS ( SELECT 'a','1','1','2','7' FROM DUAL UNION ALL SELECT 'a','2','2','2','7' FROM DUAL UNION ALL SELECT 'a','3','3','2','7' FROM DUAL UNION ALL SELECT 'b','4','3','4','7' FROM DUAL UNION ALL SELECT 'b','5','5','4','7' FROM DUAL UNION ALL SELECT 'c','6','1','1','7' FROM DUAL ) SELECT 이름,코드,코드별점수,이름별평균,총합 , SUM(CASE WHEN RN=1 THEN 이름별평균 END) OVER() 총합2 FROM ( SELECT 이름 , 코드 , 코드별점수 , 이름별평균 , 총합 , ROW_NUMBER() OVER(PARTITION BY 이름 ORDER BY NULL) RN FROM T )
WITH t AS ( SELECT 'a' nm, 1 cd, 1 v FROM dual UNION ALL SELECT 'a', 2, 2 FROM dual UNION ALL SELECT 'a', 3, 3 FROM dual UNION ALL SELECT 'b', 4, 3 FROM dual UNION ALL SELECT 'b', 5, 5 FROM dual UNION ALL SELECT 'c', 6, 1 FROM dual ) SELECT nm, cd, v , x , SUM(DECODE(rn, 1, x)) OVER() y FROM (SELECT nm, cd, v , AVG(v) OVER(PARTITION BY nm) x , ROW_NUMBER() OVER(PARTITION BY nm ORDER BY cd) rn FROM t ) ;