[12일차][SQL]그 외 유용한 함수 - RANK(),LEAD(),LAG()

김준석·2023년 12월 26일

RANK

  • RANK() : 순위를 낼 수 있다. (1위가 동순위라면 그 다음 순위는 3위)
  • dense_rank() : 순위를 낼 수 있다.(1위가 동 순위라면 그 다음 순위는 2위)
  • percent_rank() : %비율로 순위를 매김.(꼴등은 0%, 1등은 100%)

구문 : rank() over 컬럼명

예제) 나이가 적은 순위를 매겨보자

SELECT age, 
rank() over (order by age) as asc_rank -- age가 적은 순서로 순위를 매기자(order by asc)
FROM Customers

결과 : 22세가 1위, 31세가 5위


LEAD

  • lead() : 읽을 컬럼값과 파티션(select)값 다음에 오는 읽을컬럼이후값을 가져오는 함수
  • 구문 : LEAD(읽을 컬럼, 읽을 컬럼 다음 순서.) OVER (PARTITION by 파티션 컬럼1, 파티션 컬럼2, 파티션 컬럼3..) 반환컬럼명.

예제) 고객행동을 파악해보자.

어떤 고객이 사이트를 클릭하고 그 뒤에 또 어떤 사이트를 클릭했는지 알아보자.

테이블

코드

SELECT clk_index, user_name, date,
LEAD(clk_index, 1) --LEAD 함수가 가져올 컬럼는 clk_index이며 1이들어갔으므로 바로 다음 값을 추출(2가 들어가면 2번째의 값)
OVER (PATRIRION BY user_name, date --유저이름과, 날짜를 기준으로 파티셔닝함. 
      ORDER BY clk_index) --clk_index 순으로 정렬
next_click --lead함수 결과를 next_click으로 반환 
FROM clicks 
ORDER BY 3,1

결과값 : 읽을값 = clk_index, 읽을값 이후의 값 = next_click

영희는 0인덱스를 클릭 후 2인덱스를 클릭함.

LAG()

  • LAG() : 읽을 컬럼 이전에 왔던 값을 찾는 함수

예제) 고객행동을 파악해보자.

어떤 고객이 사이트를 클릭하기 전에 어떤 사이트를 클릭했는지 알아보자.

테이블

코드

SELECT clk_index, user_name, date, 
LAG(clk_index, 1) --LAG 함수가 가져올 컬럼는 clk_index이며 1이들어갔으므로 바로 이전값을 가져옴.(2가 들어갔다면 2번째 전 값)
OVER (PATRIRION BY user_name, date --유저이름과, 날짜를 기준으로 파티셔닝함. 
      ORDER BY clk_index) --clk_index 순으로 정렬
next_click --lead함수 결과를 next_click으로 반환 
FROM clicks 
ORDER BY 3,1

결과: 영희의 2번째 클릭은 index가 2이다. 그 전 클릭은 0으로 나온다.

0개의 댓글