결과값을 참조하는 로직을 루프없이 할 수 있나요? 0 6 930

by 빳데리빵빵 [SQL Query] [2017.08.31 17:56:32]


안녕하세요 지난번에 고수님들의 도움을 받아 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

이렇게 보려면 단일쿼리로 안되고 프로시져로 루프를 돌려야 할까요??

by 마농 [2017.08.31 18:20:54]

1. 첫번째 산식 및 결과까지만 이해가 가고
2. 두번째 부터는 이해가 안가네요?
  - 어떤 규칙에 의해 두번째 산식이 나왔는지 설명이 부족합니다.
3. 최종결과의 의미도 알 수 없고
4. 얼마만큼 루프를 돌아야 하는지도 명확하지 않고.


by 빳데리빵빵 [2017.08.31 18:35:45]

4개의 값을 가지고 계산한 값을 합해서 하나의값을 만들어 총 5개의 로우중에 합계값을 포함한 4개의 건수를 비율하고 다시 곱해서 sum값을 만드는 구조이고요 루프횟수는 예제에서는 4번입니다

기본 4개의 값을가지고 8개결과값을 만들어야하는데 루프말고 sql구문으로 할라니 어렵더라고요 ;;;;


by 마농 [2017.08.31 18:42:29]

길게 글로만 쓰셔서 이해가 안가네요.
각 행 단위로 왜 그렇게 흘러가게 되는지를 계산식으로 표현해 주세요.


by 빳데리빵빵 [2017.08.31 19:28:57]

행번호      비율       건수

      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

이렇게 비율은 가만히 있고 대상이 되는 건수값이 순차적으로 바뀌는 구조입니다 ㅠ.ㅠ

 


by 마농 [2017.09.01 08:03:00]
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
;

 


by 빳데리빵빵 [2017.09.01 08:50:14]

우아....큐브 모델링 기법도 있네요 앞으로 더 열심히 해야겠네요 감사합니다 마농님 ^^*

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입