현할차 로직 짜면서 막혀 있는데요 0 2 3,654

by 깨복숭이 [SQL Query] [2024.03.18 14:26:43]


안녕하세요 궁금한게 있어 글 남깁니다. 

프로시저를 쓰지 않고 아래의 엑셀 로직을 만드는 SELECT쿼리를 짤수 있을까요?

LAG를 쓰면 간단하게 될거다 생각했는데 막상 짜보니 잘안되네요 

도움주시면 너무 감사하겠습니다 .

  A B C (C0 = 0)
1 1 2 2
2 3 4 C1 * B2 = 2*4
3 5 6 C2 * B3 = 2*4 * 6
by 마농 [2024.03.18 16:23:16]
WITH t AS
(
SELECT 1 a, 2 b FROM dual
UNION ALL SELECT 3, 4 FROM dual
UNION ALL SELECT 5, 6 FROM dual
)
-- 1. 분석함수 와 수학공식 이용(누적곱) --
SELECT ROW_NUMBER() OVER(ORDER BY a) rn
     , a
     , b
     , ROUND(EXP(SUM(LN(b)) OVER(ORDER BY a))) c
  FROM t
;
WITH t AS
(
SELECT 1 a, 2 b FROM dual
UNION ALL SELECT 3, 4 FROM dual
UNION ALL SELECT 5, 6 FROM dual
)
-- 2. Recursive 쿼리 이용(누적곱) --
, t1 AS
(
SELECT ROW_NUMBER() OVER(ORDER BY a) rn
     , a, b
  FROM t
)
, t2(rn, a, b, c) AS
(
SELECT rn
     , a
     , b
     , b c
  FROM t1
 WHERE rn = 1
 UNION ALL 
SELECT b.rn
     , b.a
     , b.b
     , a.c * b.b
  FROM t2 a
     , t1 b
 WHERE b.rn = a.rn + 1
)
SELECT *
  FROM t2
;
WITH t AS
(
SELECT 1 a, 2 b FROM dual
UNION ALL SELECT 3, 4 FROM dual
UNION ALL SELECT 5, 6 FROM dual
)
-- 3. Model 절 이용
SELECT *
  FROM t
 MODEL
 DIMENSION BY (ROW_NUMBER() OVER(ORDER BY a) rn)
 MEASURES (a, b, b c)
 RULES (c[rn > 1] = c[cv()-1] * b[cv()])
;

 


by 깨복숭이 [2024.03.18 16:56:12]

너무너무 고맙습니다

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