본문 바로가기

DB/Oracle

(22)
[Oracle] 쿼리문의 실행 계획 확인하기 1. 실행 계획을 알고자 하는 쿼리 위에 키워드(?) 작성 explain plan for [ 쿼리 내용 ] 2. 실행 계획 조회
[Oracle] 책 3장 연습문제 풀이 기록 2. student 테이블의 birthday 컬럼을 참조해서 아래와 같이 월별로 생일자 수를 출력하세요. [212 페이지] [1차 시도] PIVOT [2차 시도] DECODE ▶ PIVOT 사용법이 최선인지 모르겠으나 결과에 EA를 붙여 출력해야 한다면 DECODE를 사용한 코드가 더 효율적일 것으로 생각됨 ( 3번 문제도 마찬가지 ) 4. emp 테이블을 사용해 아래의 화면과 같이 부서별 직급별로 급여 합계 결과를 출력하세요 [213 페이지] ▶ 사용 함수 힌트 (1) 문제에 힌트가 숨어있음. [부서별 직급별로] 결과 값에는 부서번호를 제외한 직업별 합계 표기와 부서별 합계, 부서와직업별 합계가 표기됨. 더보기 한 마디로 기준별 소계가 요약되어 있는데, 이를 그룹핑하고 효과적으로 세 가지 조건에 맞는결..
[Oracle] LAG 함수 활용 - 차이 구하기 LAG 함수의 활용 - 예제. 1000번 판매점의 일자별 판매 내역과 금액 및 전일 판매 수량과 금액 차이 출력 - 만약 특정 분류를 원할 경우 OVER에 PARTITION BY를 넣어 구분할 수 있음
[Oracle] RATIO_TO_REPORT( ) 함수 - 비율 구하기 RATIO_TO_REPORT( ) - 오라클에서 제공하는 비율 계산 함수 [예제 1] panmae 테이블에서 100번 제품의 판매 내역과 각 판매점별 판매 비중 구하기 SELECT P_CODE, SUM(P_QTY) OVER ( ) "total_qty", RATIO_TO_REPORT( SUM(P_QTY) ) OVER ( ) "qty_%", RATIO_TO_REPORT( SUM(P_TOTAL) ) OVER ( ) "total_%" FROM PANMAE WHERE P_CODE = '100' GROUP BY P_CODE, P_QTY, P_STORE, P_TOTAL; 전체 판매 내역 중 100번 제품이 총 몇 개 팔렸는지, 판매 금액은 얼마이며, 그중 판매점별 판매량과 판매 금액을 구한 후 수량 대비 비중과 금액..
[Oracle] SUM ( ) OVER를 활용한 누계 구하기 SUM( ) OVER ( ) - 누계 계산 - 문법 SUM ( 합계 대상 컬럼 ) OVER ( [PARTITION BY 컬럼 ] ORDER BY 컬럼 ) - PARTITION BY의 사용으로 세부적 grouping 가능 - 예제 1. 1000번 대리점의 판매 내역을 제품 코드별로 분류한 후 판매일자, 제품코드, 판매량, 판매금액, 누적판매금액을 출력하시오. SELECT P_DATE, P_CODE, P_QTY, P_TOTAL, SUM ( P_TOTAL ) OVER ( PARTITION BY P_CODE ORDER BY P_TOTAL ) "TOTAL" FROM PNAMAE WHERE P_CODE = '1000'; 1000 번 P_CODE의 내역만 걸러 집계 PARTITION BY 구문의 P_CODE로 누적판..
[Oracle] 윈도우 함수/RANK( ) 함수 - 순위 출력 함수, DENSE_RANK( ) 순위 함수, ROW_NUMBER( ) 순위 함수 RANK( ) 함수 - 순위 출력 함수 - 주어진 컬럼 값의 그룹에서 값의 순위를 계산한 후 순위 출력 - 같은 순위를 가지는 순위 기준에 대해서는 같은 출력 값을 가져 결과가 연속하지 않을 수 있음 - top-N과 bottom-N 등 순위를 출력하는 리포팅 작업에 유용함 - 특정 데이터 순위만 볼 수도 있고, 전체 데이터 순위를 다 볼 수 있는 두 가지 경우가 존재함 (1) 특정 데이터 순위 확인 : 싱글 그룹 함수 - 문법 RANK ( 조건 값 ) WITHIN GROUP ( ORDER BY 조건 값 컬럼명 [ ASC | DESC ] ) - 조건 값과 컬럼명은 반드시 동일한 컬럼이어야 함 - 예시 SELECT RANK ( 'SMITH' ) WITHIN GROUP ( ORDER BY ename ) FRO..
[Oracle] LAG( )함수 - 이전 행 값 가져오기, LEAD( )함수 - 이후 행 값 가져오기 LAG( ) 함수 - 이전 행 값을 가져올 때 사용 - 문법 LAG ( 출력할 컬럼명, OFFSET, 기본 출력 값 ) OVER ( Query_partition 구문, Order by 정렬할 컬럼 ) 컬럼명 : 값을 가져올 컬럼명 OFFSET : 이전 행의 기준 (ex) LAG ( job, 1, 0 ) => job 컬럼의 한 행 위의 값. 이전 행이 없을 경우 0 출력 (ex) LAG ( job, 3, 2 ) => job 컬럼의 세 행 위의 값. 해당 값이 없을 경우 2 출력 기본 출력 값 : 값이 없을 경우 기본으로 출력하는 값 LEAD( ) 함수 - 이후 행 값을 가져옴 - 문법 LEAD ( 출력할 컬럼명, OFFSET, 기본 출력 값 ) OVER ( Query_partition 구문, Order b..
[Oracle] 분석함수, 윈도함수 - GROUPING SETS ( ), LISTAGG( ), PIVOT( ), UNPIVOT( ) 함수 GROUPING SETS( ) - 그룹핑 조건이 여러 개일 경우 유용하게 사용됨 - 하나의 테이블에 대한 여러 가지 그룹 함수가 사용될 경우 해당 함수를 사용하는 것이 좋음 - 예시. 학년별, 학과별 인원수와 키, 몸무게 각각의 합계 동시 출력 SELECT grade, deptn01, COUNT(*), SUM(height), SUM(weight) FROM STUDENT GROUP BY grouping sets (grade, deptn01) ORDER BY grade, deptn01; LISTAGG( ) 함수 - Oracle 11g에서 추가된 함수 - 일정 기준과 구분자를 통해 데이터가 한 줄로 연결되어 출력됨 - LISTAGG( 컬럼 이름, '구분자' ) WITHIN GROUP ( ORDER BY 컬럼명..