'DataBase'에 해당되는 글 11건

각 레코드 하나에 대해 자기보다 작은 값을 가지는 RECORD 수 만큼 조인이 걸린다.

조인에 의해 생성된 집합의 각 레코드가 어떤 그룹핑단위를 가질것인지를 결정해준다.

결정된 그룹핑 단위로 그룹을 지으면 원래 테이블에 있는 각 레코드가 그룹핑 단위가 되어 누계가 나오게되고

, 그것을 원래 값과 조인시켜주면 원하는 값이나온다.

 

 

 

1
2
3
4
SELECT ROWNUM RCNT, B
 
   FROM TEST01
  WHERE A <= '00010';
cs

 

 

 

위와 같은 쿼리를 만들어서 IN-LINE VIEW를 사용하고 GR_1이라 하자.

 

1
2
3
SELECT ROWNUM JCNT
  FROM TEST01
 WHERE A <= '00010';
cs

 

 

위와 같은 쿼리를 만들어서 IN-LINE VIEW를 사용하고 GR_2이라 하자.

 

두개의 테이블을 조인하면 RECORD수가 그 제곱만큼 늘어나는 데이터가 생김 (CARTESIAN PRODUCT) 이생긴다.

JCNT  1을 기본 레코드로, 2는 참조하고자 하는 전값, 3은 전 전값,  4는 그 전값 식으로 순위를 가지게된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT DECODE(JCNT, 1, RCNT , RCNT -1 + JCNT ) R_CNT , B , JCNT
  
  
  FROM ( 
         SELECT ROWNUM RCNT ,
                A,
                B
           FROM TEST01
          WHERE A<= '00010'
        ) GR_1, 
        (
          SELECT ROWNUM JCNT
            FROM TEST01
           WHERE A<= '00010'
        ) GR_2 ;
cs

 

 

 

 

카티젼프로덕트이므로 10*10 = 100레코드형태로 표출되며, RCNT에 대하여 JCNT를 첨자로 하는 2차월 배열형태로 생긴다.

JCNT가 1이면 RCNT 값을 , 그보다 크면 RCNT -1 + JCNT 값을 SUM을 위한 그룹핑 단위로 가지면된다.

 

 

추출된 모든 RECORD는 RCNT와 JCNT를 갖는다.

JCNT를 기준으로 하든 RCNT를 기준으로 하든 똑같은 결과가 나온다.

JCNT를 기준으로 생각해보는 경우 JCNT가 1이면, RCNT 자신의 값이 GROUP 단위가 되고, JCNT가 2이면 RCNT-1,

3이면 RCNT-2, 4이면 RCNT-3이 동일 그룹단위가 된다.

 

 

 

출처 : 이채남의 오라클 실습

 

'DataBase' 카테고리의 다른 글

소계와 합계 구하는 방법 (1)  (0) 2015.12.17
프로시져란 (PROCEDURE) ?  (0) 2015.12.16
COPY_T 테이블이란?  (0) 2015.12.16
누계를 구하는 방법에 대하여 (1)  (0) 2015.12.10
SUBSTR 함수  (0) 2015.12.09
블로그 이미지

클라인STR

,

 

1
2
3
4
이름 널        유형           
-- -------- ------------ 
A  NOT NULL VARCHAR2(10
B           NUMBER       
cs

 

1
SELECT * FROM TEST01;
cs

다음과같은 원본데이터에 값의 누계를 구하고 싶다면 ?

 

1) 오라클 분석함수를 이용하여 구하기

1
2
SELECT  A AS "코드", B AS "값" , SUM(B) OVER (ORDER BY B) AS "누계값"
FROM TEST01;
cs

 

 

2) 부등호 조인을 이용하여 구하기

1
2
3
4
5
6
7
8
SELECT 
        X.A
      , X.B
      , Y.B
FROM TEST01 X
   , TEST01 Y
WHERE Y.A <=X.A
  AND X.A <= '00012';
cs

 

둘중하나를 다른 쪽보다 작거나 같다로 조건으로 조인을 걸어준결과 1건의 행에 대해 자신의 A컬럼 값보다 작거나 같은 행들의 수 만큼 행들이 연결된다.

GROUP BY 를 하고 B_1 값을 SUM해준다.

 

1
2
3
4
5
6
7
8
9
10
SELECT 
        X.A
      , X.B
      , SUM(Y.B) ACC
FROM TEST01 X
   , TEST01 Y
WHERE Y.A <=X.A
  AND X.A <= '00012'
GROUP BY X.A
      , X.B ;
cs

 

 

 

출처 : 전문가로 가는 길 오라클 실습 (이채남님 저서)

 

'DataBase' 카테고리의 다른 글

소계와 합계 구하는 방법 (1)  (0) 2015.12.17
프로시져란 (PROCEDURE) ?  (0) 2015.12.16
COPY_T 테이블이란?  (0) 2015.12.16
누계를 구하는 방법에 대하여 (2)  (0) 2015.12.14
SUBSTR 함수  (0) 2015.12.09
블로그 이미지

클라인STR

,

SUBSTR 함수

DataBase 2015. 12. 9. 22:34
1
SELECT SUBSTR(DEPT_CODE,1,3), DEPT_CODE FROM TDEPT;
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
SUBSTR(DEPT_CODE,1,3) DEPT_CODE
--------------------- ---------
000                   000000    
AA0                   AA0001    
AB0                   AB0001    
AC0                   AC0001    
BA0                   BA0001    
BB0                   BB0001    
BC0                   BC0001    
CA0                   CA0001    
CB0                   CB0001    
CC0                   CC0001    
CD0                   CD0001    
cs

 

SUBSTR(컬럼 또는 문자열, 숫자1, 숫자2)

컬럼 또는 문자열에서 첫번째 지정된 숫자에 해당하는 자리부터, 두번째 지정된 숫자에 해당하는 만큼의 문자열을 돌려준다.

숫자2가 생략되면 마지막 문자까지 돌려주게된다.

시작인덱스는 1부터 시작한다.

 

1
SELECT SUBSTR(DEPT_CODE,3), DEPT_CODE FROM TDEPT;
cs

 

1
2
3
4
5
6
7
8
9
10
11
0000    000000
0001    AA0001
0001    AB0001
0001    AC0001
0001    BA0001
0001    BB0001
0001    BC0001
0001    CA0001
0001    CB0001
0001    CC0001
0001    CD0001
cs

'DataBase' 카테고리의 다른 글

소계와 합계 구하는 방법 (1)  (0) 2015.12.17
프로시져란 (PROCEDURE) ?  (0) 2015.12.16
COPY_T 테이블이란?  (0) 2015.12.16
누계를 구하는 방법에 대하여 (2)  (0) 2015.12.14
누계를 구하는 방법에 대하여 (1)  (0) 2015.12.10
블로그 이미지

클라인STR

,