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% )
부산
...
...
-------------------------------------------------------------------------------------------------