더북(TheBook)

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% )
    부산
    ...
    ...
    -------------------------------------------------------------------------------------------------
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.