(DB) Oracle/SELECT-금액 Oracle - 순차적으로 누적하기8 농부지기 2017. 1. 19. 23:42 [ Oracle - 순차적으로 누적하기8 ] 음수의 연속된 곱을 한방에 해결할수 있는 방법이 있을까요? 1. 절대값만 누적 곱한 후 음수값만 카운트하여 건수가 홀수이면 -1을 곱해주면 끝. WITH test AS ( SELECT 1 id, 1 col1 FROM dual UNION ALL SELECT 2, -2 FROM dual UNION ALL SELECT 3, 3 FROM dual UNION ALL SELECT 4, -4 FROM dual UNION ALL SELECT 6, 6 FROM dual UNION ALL SELECT 7, -7 FROM dual UNION ALL SELECT 9, 9 FROM dual ) SELECT id, col1 , ROUND( EXP(SUM(LN(ABS(col1))) OVER(ORDER BY id)) * DECODE(MOD(COUNT(DECODE(SIGN(col1),-1,1)) OVER(ORDER BY id),2),1,-1,1) , 10) col2 FROM test ; 다만 이때 주의할것은 LN 함수 때문에 정확한 값이 아닌 근사값이 나온다는 것입니다. 그래서 위의 쿼리에서 round 함수를 이용해 값을 보정해 주었습니다. 2. Model 절을 이용하면 정확한 값을 계산 할 수 있습니다. ; WITH test AS ( SELECT 1 id, 1 col1 FROM dual UNION ALL SELECT 2, -2 FROM dual UNION ALL SELECT 3, 3 FROM dual UNION ALL SELECT 4, -4 FROM dual UNION ALL SELECT 6, 6 FROM dual UNION ALL SELECT 7, -7 FROM dual UNION ALL SELECT 9, 9 FROM dual ) SELECT id, col1, col2 FROM test MODEL DIMENSION BY (ROW_NUMBER() OVER(ORDER BY id) rn) MEASURES (id, col1, 0 col2) RULES (col2[ANY] = NVL(col2[CV()-1], 1) * col1[CV()]) ; 저작자표시 (새창열림)