안녕하세요 지난번에 고수님들의 도움을 받아 sql 구문을 열심히 공부하고 있습니다
다시 궁금한 점이 생겨서 문의 드립니다
비율 건수
0.1 1
0.2 2
0.3 3
0.4 4
이런값을 가지고 결과물을 만드는데 비율과 건수를 곱한값을 가지고 sum한 다음에 그값을 다시 참조해서 값들을 계속 산출할수 있을까요?
위에 값을 기준으로 보면 각 컬럼을 곱하면
1번 0.1×1=0.1
2번 0.2×2=0.4
3번 0.3×3=0.9
4번 0.4×4=1.6
이런값이 나오는데 전체 sum을 하면 3이 되고 이 값을 가지고 다시 참조해야 하는데
1번 0.1×3=0.3
2번 0.2×1=0.2
3번 0.3×2=0.6
4번 0.4×3=1.2
이런값이 나오고 다시 sum을하면 2.3이 되고 이 값을 다시 참조해서 계산이 가능할까요? 이런 방식으로 최종 결과값은
비율 건수
1.953
1.93
2.3
3
0.1 1
0.2 2
0.3 3
0.4 4
이렇게 보려면 단일쿼리로 안되고 프로시져로 루프를 돌려야 할까요??
행번호 비율 건수
1 0.1 1
2 0.2 2
3 0.3 3
4 0.4 4
기본 자료가 이렇게 있으면 각 행을 비율×건수를 해주면
1 0.1×1=0.1
2 0.2×2=0.4
3 0.3×3=0.9
4 0.4×4=1.6
이렇게 해서 비율×건수한것을 sum 하면 3이되죠 그러면
3
1 0.1 1
2 0.2 2
3 0.3 3
4 0.4 4
이렇게 곱한값의 sum 값이 표현되고 그 값이 1번째가 되서 다시 비율×건수가 되는 형태입니다
1 0.1×3=3
2 0.2×1=0.2
3 0.3×2=0.6
4 0.4×3=1.2
이 값들을 다시 sum하면 2.3이되서
2.3
3
1 0.1 1
2 0.2 2
3 0.3 3
4 0.4 4
이렇게 비율은 가만히 있고 대상이 되는 건수값이 순차적으로 바뀌는 구조입니다 ㅠ.ㅠ
WITH t AS ( SELECT 0.1 rat, 1 cnt FROM dual UNION ALL SELECT 0.2, 2 FROM dual UNION ALL SELECT 0.3, 3 FROM dual UNION ALL SELECT 0.4, 4 FROM dual ) SELECT * FROM t MODEL DIMENSION BY (ROW_NUMBER() OVER(ORDER BY rat DESC) rn) MEASURES (rat, cnt) RULES ( cnt[FOR rn FROM 5 TO 8 INCREMENT 1] = rat[4] * cnt[CV()-1] + rat[3] * cnt[CV()-2] + rat[2] * cnt[CV()-3] + rat[1] * cnt[CV()-4] ) ORDER BY rn DESC ;