본문 바로가기

배우기/복습노트[oracle sql]

[복습] SQL | Oracle 서로 다른 행의 비교와 연산을 위한 함수 window function(lag, lead, sum, avg, min, max, count, rank) (2)

728x90
반응형

window function을 이어서 작성해보겠다.

앞서 설명하였듯이 window function[WF]는 서로 다른 행의 비교와 연산을 위해 만든 함수로, group by를 쓰지 않고 데이터 축약 없이 그룹 연산이 가능하다.

 

종류로는 lag, lead, sum, avg, min, max, count, rank가 있다.

sum, avg, min/max, count는 아래 링크를 참고하면 되겠다.

 

https://metime.tistory.com/74

 

5. rank(일반 함수와  window function의 문법이 다르다)

 1) 특정값에 대한 순위 확인(window function이 아닌 일반 함수)

문법은 아래와 같다.

 

 

예제를 하나 풀어보자.

emp에서 급여가 3000이면 전체 급여 순위는 어느정도일까?

 

12등이다.

 

 2) 전체 중 / 특정 그룹 중 값의 순위 확인(window function)

문법

이것도 예제를 적용해보자

각 직원의 급여 전체 순위를 출력하여라.

rank도 있지만 dense_rank도 있다.

dense_rank는 동순위 발생도 인정하는 것이며, 이 둘의 차이를 묻는 문제가 SQLD에 나온다고 한다.

 

한 문제를 더 풀어보자.

각 직원의 이름, 부서번호, 급여, 부서별 급여 순위를 큰 순서대로 출력하여라.

deptno를 partition by에 넣어주면 된다.

 

 

 

6. lag: 이전 값 가져오기

lead: 이후 값 가져오기

문법

lead 문법도 위와 같다.

 

바로 문제에 적용하여 풀어보겠다.

emp에서 바로 전에 입사한 상사와의 급여를 비교하여보자.

 

한 문제 더....!

바로 전에 입사한 상사보다 높은 급여를 받는 직원을 출력하여라.

 

 

728x90

 

예전에 풀었던 문제인데, 인라인뷰와 window function을 이용하여 각각 풀고, 성능을 비교하여라.

delivery 테이블을 이용하여 시간대별 가장 인기있는 음식 업종을 출력하여라.

 

먼저 인라인뷰 풀이이다.

그리고 성능은 다음과 같다.

 

 

 

다음은 window function 중 rank로 접근한 내 풀이 방법이다.

 

 

다음은 선생님이 max로 푸신 풀이 결과이다.

 

 

성능은 인라인뷰보다 window function이 훨씬 적게 나왔고 선생님 버퍼와 내 버퍼는 동일하게 960 찍혔다.

 

 

728x90
반응형