Self-Check

    1. 계층형 쿼리 응용편에서 LISTAGG 함수를 사용해 다음과 같이 로우를 컬럼으로 분리했다.

    입력

        SELECT department_id, LISTAGG(emp_name, ',') WITHIN GROUP (ORDER BY emp_name) as empnames
          FROM employees
         WHERE department_id IS NOT NULL
         GROUP BY department_id;
    

    LISTAGG 함수 대신 계층형 쿼리, 분석 함수를 사용해서 위 쿼리와 동일한 결과를 산출하는 쿼리를 작성해 보자.

    2. 다음 쿼리는 사원 테이블에서 JOB_ID가 ‘SH_CLERK’인 사원을 조회하는 쿼리다.

    입력

        SELECT employee_id, emp_name, hire_date
          FROM employees
         WHERE job_id = 'SH_CLERK'
        ORDER By hire_date;
    

    결과

        EMPLOYEE_ID EMP_NAME             HIRE_DATE
        ----------- -------------------- -------------------
        184         Nandita Sarchand     2004/01/27 00:00:00
        192         Sarah Bell           2004/02/04 00:00:00
        185         Alexis Bull          2005/02/20 00:00:00
        193         Britney Everett      2005/03/03 00:00:00
        188         Kelly Chung          2005/06/14 00:00:00
        ....
        ....
        199         Douglas Grant        2008/01/13 00:00:00
        183         Girard Geoni         2008/02/03 00:00:00
    

    사원 테이블에서 퇴사일자(retire_date)는 모두 비어 있는데, 위 결과에서 사원번호가 184번인 사원의 퇴사일자는 다음으로 입사일자가 빠른 192번 사원의 입사일자라고 가정해서 다음과 같은 형태로 결과를 추출하도록 쿼리를 작성해 보자(입사일자가 가장 최근인 183번 사원의 퇴사일자는 NULL이다).

    결과

        EMPLOYEE_ID EMP_NAME             HIRE_DATE            RETIRE_DATE
        ----------- -------------------- -------------------  ---------------------------
        184         Nandita Sarchand     2004/01/27 00:00:00  2004/02/04 00:00:00
        192         Sarah Bell           2004/02/04 00:00:00  2005/02/20 00:00:00
        185         Alexis Bull          2005/02/20 00:00:00  2005/03/03 00:00:00
        193         Britney Everett      2005/03/03 00:00:00  2005/06/14 00:00:00
        188         Kelly Chung          2005/06/14 00:00:00  2005/08/13 00:00:00
        ....
        ....
        199         Douglas Grant        2008/01/13 00:00:00  2008/02/03 00:00:00
        183         Girard Geoni         2008/02/03 00:00:00
    

    3. sales 테이블에는 판매 데이터, customers 테이블에는 고객정보가 있다. 2001년 12월(SALES_MONTH = ‘200112’) 판매 데이터 중 현재일자를 기준으로 고객의 나이(customers.cust_year_of_birth)를 계산해서 다음과 같이 연령대별 매출금액을 보여주는 쿼리를 작성해 보자.

    결과

        -------------------------
        연령대    매출금액
        -------------------------
        10대      xxxxxx
        20대      ....
        30대      ....
        40대      ....
        -------------------------
    

    4. 3번 문제를 이용해 월별로 판매금액이 가장 하위에 속하는 대륙 목록을 뽑아보자.
    (대륙 목록은 countries 테이블의 country_region에 있으며, country_id 컬럼으로 customers 테이블과 조인을 해서 구한다).

    결과

        ---------------------------------
        매출월    지역(대륙)  매출금액
        ---------------------------------
        199801    Oceania      xxxxxx
        199803    Oceania      xxxxxx
        ...
        ---------------------------------
    

    5. 5장 연습문제 5번의 정답 결과를 이용해 다음과 같이 지역별, 대출종류별, 월별 대출잔액과 지역별 파티션을 만들어 대출 종류별 대출잔액의 퍼센트(%)를 구하는 쿼리를 작성해보자.

    결과

        ------------------------------------------------------------------------------------------------
        지역    대출종류        201111         201112    201210    201211   201212   203110    201311
        ------------------------------------------------------------------------------------------------
        서울    기타대출       73996.9( 36% )
        서울    주택담보대출   130105.9( 64% )
        부산
        ...
        ...
        -------------------------------------------------------------------------------------------------
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.