안녕하세요. 쿼리 짜다가 막히는 부분이 있어 질문드립니다..
yyyymmddhh | yyyymmdd | yyyymm | r1 | r2 | r3 |
2019010100 | 20190101 | 201901 | 35.8 | 48.4 | 16213.3 |
2019010101 | 20190101 | 201901 | 30.5 | 34.3 | 17920.0 |
위와같은 데이터가 있습니다.
시간 기준 데이터를 월, 일 단위로 그룹핑하여 계산하려고 하는데요.
yyyymmdd | yyyymm | r1 | r2 | r3 |
20190101 | 201901 | 33.0 | 46.0 | 17066.7 |
월 단위로 그룹핑하면 결과가 이렇게 되어야하고,
공식은 아래와 같습니다.
r1 = sum(r1*r3)/sum(r3)
r2 = max((R2*R3)/AVG(R3))
r3 = avg(R3)
여기서 문제가 r2가 단일그룹이 아니라 안된다고 하는데 해결방법을 잘 모르겠습니다..ㅠ
WITH TEST1 AS ( SELECT '2019010100' yyyymmddhh, '20190101' yyyymmdd, '201901' yyyymm, '35.8' r1, '48.4' r2, '16213.3' r3 FROM DUAL UNION ALL SELECT '2019010101' yyyymmddhh, '20190101' yyyymmdd, '201901' yyyymm, '30.5' r1, '34.3' r2, '17920' r3 FROM DUAL ) SELECT yyyymmdd, SUM(r1*r3)/SUM(r3) r1, MAX((R2*R3)/AVG(R3)) r2, AVG(R3) r3 FROM TEST1 GROUP BY yyyymmdd ;
WITH TEST1 AS ( SELECT '2019010100' yyyymmddhh, '20190101' yyyymmdd, '201901' yyyymm, '35.8' r1, '48.4' r2, '16213.3' r3 FROM DUAL UNION ALL SELECT '2019010101' yyyymmddhh, '20190101' yyyymmdd, '201901' yyyymm, '30.5' r1, '34.3' r2, '17920' r3 FROM DUAL ) SELECT yyyymmdd, SUM(r1*r3)/SUM(r3) r1, MAX(R2*R3)/AVG(R3) r2, AVG(R3) r3 FROM TEST1 GROUP BY yyyymmdd
1. 시간단위 테이블
yyyymmddhh | yyyymmdd | yyyymm | r1 | r2 | r3 |
2019010100 | 20190101 | 201901 | 35.8 | 48.4 | 16213.3 |
2019010101 | 20190101 | 201901 | 30.5 | 34.3 | 17920.0 |
2. 일 단위 계산
식 | 결과 | |
r1 | ((35.8*16213.3)+(30.5*17920))/(16213.3+17920.0) | 33.0175 |
r2 | (48.4*16213.3)/((16213.3+17920)/2) | 45.97995 |
(34.3*17920)/((16213.3+17920)/2) | 36.01504 | |
r3 | (16213.3+17920.0)/2 | 17066.65 |
r2는 결과값 중 max값을 사용
yyyymmdd | yyyymm | r1 | r2 | r3 |
20190101 | 201901 | 33.0 | 46.0 | 17066.7 |
최종 일 단위 결과
---
이런식으로 계산과정을 거쳤습니다.
월 단위도 일 단위 결과를 가지고 마찬가지로 수행해야하구요..