메뉴 건너뛰기

tnt_db

Oracle 부등호 조인

운영자 2002.09.18 14:20 조회 수 : 56559 추천:9

부등호 JOIN

조건.
    TEST13 에 다음과 같은 DATA가 있다.
    LEVEL  : 등급
    FPOINT : 하한금액
    TPOINT : 상한금액
    GIFT   : 구간해당상품

    LEV FPOINT     TPOINT     GIFT                
    --- ---------- ---------- --------------------
    01           0      10000 엽서                
    02       10001      50000 볼펜                
    03       50001     100000 공중전화카드        
    04      100001     200000 머그컵              
    05      200001     300000 손전등              
    06      300001     500000 찾잔세트            
    07      500001     700000 휴대용가스버너      
    08      700001    1000000 도서상품권          
    09     1000001    1500000 녹차세트            
    10     1500001    2000000 소형청소기          
    11     2000001    3000000 옷걸이              
    12     3000001    5000000 구두상품권          
    13     5000001    7000000 콘도이용권          
    14     7000001   10000000 PCS무료가입권      
    15    10000001   20000000 갈비세트            
    16    20000001   30000000 굴비세트            
    17    30000001   50000000 의류교환권          
    18    50000001   70000000 TV                  
    19    70000001  100000000 AUDIO              
    20   100000001  200000000 COMPUTER            
    20 행이 선택되었습니다

    TEST14 에는 다음과 같은 DATA가 있다.
    CUST  : 고객
    POINT : 실제 점수

    CUST            POINT    
    --------------- ----------
    721101-2144952      809910
    721109-2144952     1439688
    710125-1144951     3608860
    701212-1143211     8996280
    650207-1765152    20239650
    672102-2123452    40935040
    500823-1132762    75636408
    771201-2233445   129855120
    680801-1234455    10059470
    620908-2121232   123674200

문제.
    고객별 누적 구매금액에 따라 상품을 지급하기위해 구매범위를
    20단계로 분류했다.
    첫번째 각 고객별로 해당되는 상품의 LIST
    두번째 각 상품별로 준비되어야할 갯수를 구하고 싶다.
    결과는 다음과  같이 나오면 된다.

    CUST            GIFT                
    --------------- --------------------
    721101-2144952  도서상품권          
    721109-2144952  녹차세트            
    710125-1144951  구두상품권          
    701212-1143211  PCS무료가입권      
    680801-1234455  갈비세트            
    650207-1765152  굴비세트            
    672102-2123452  의류교환권          
    500823-1132762  AUDIO              
    771201-2233445  COMPUTER            
    620908-2121232  COMPUTER            
          
    GIFT                 상품수    
    -------------------- ----------
    AUDIO                         1
    COMPUTER                      2
    PCS무료가입권                 1
    갈비세트                      1
    구두상품권                    1
    굴비세트                      1
    녹차세트                      1
    도서상품권                    1
    의류교환권                    1

생각.
    특별히 생각할 것도 없다.
    머리속에서 시키는대로 고객의 누적금액이
    정해진 구간의 하한보다 크거나같고 상한보다 작거나 같으면된다.    
    그렇게 조인을 걸어주면된다.
    부등호 조인이 가능하다는 사실만 알면 어려움이 없는 문제다.
해법.
    첫번째 고객별로 해당상품의 LIST는 다음과 같다.

    SELECT  A.CUST,
            B.GIFT
    FROM    TEST14 A ,
            TEST13 B
    WHERE   A.POINT >  0
    AND     A.POINT BETWEEN B.FPOINT AND B.TPOINT

    두번째 각 상품별로 준비되어야 할 갯수는 다음과 같다.

    SELECT  B.GIFT,
            COUNT(A.CUST) 상품수
    FROM    TEST14 A ,
            TEST13 B
    WHERE   A.POINT BETWEEN B.FPOINT AND B.TPOINT
    GROUP BY
            B.GIFT

    문제의 핵심은 조건절이다.
    부등호 조인의 확실한 이해를 돕기위한 문제다.
위로