본문 바로가기
IT/SQL

[SQL 함수] RANK() OVER (Partition by _ Order by _ )

by marketinkerbell 2022. 3. 14.
반응형

 

 

그룹핑 한 후 순위를 매겨주는 함수 


SELECT   RANK( )   OVER ( PARTITION BY 그룹핑할 칼럼  ORDER BY 정렬할 칼럼 )

 

FROM 테이블명

 

( ORDER BY 정렬할 칼럼 DESC or ASC or 생략하면 ASC가 디폴트값 )


이 긴 함수가 한 세트~ 

 

 

 

PARTITION BY 에 지정한 칼럼 기준으로 그룹핑 해주고

ORDER BY 에 지정한 칼럼 기준으로 정렬해준담에 

RANK 행 마다 순위를 매겨준다 

 

 

 

 


 

ROW_NUMBER() OVER (Partition by _ Order by _)

와의 차이점은

 

 

ROW_NUMBER( ) : 1등이 2명이어도 1등, 2등으로 나눔

RANK( ) : 1등이 2명이면 그 다음 순위는 3등으로 매김 

 

 


 

 

 

 

예시 쿼리문 ) 

 

SELECT s.ip, s.session_id, s.read_time, s.referrer, s.destination

FROM 
( SELECT ip, session_id, read_time, referrer,destination,
rank() over (partition by session_id order by read_time) as rnk
FROM public.kinesisraw
where var_date like '2019-02-21'  and session_id != '-' 
) s

WHERE s.rnk = 1 

order by session_id 
limit 500;

 

 

 

rank() over (partition by session_id order by read_time) 를 통해

session_id 로 그룹핑하고 ,

read_time 으로 정렬 시킨다.  

 

이렇게 만든 테이블 (서브쿼리) s  와  WHERE s.rnk = 1  조건을 통해  

read_time 이 가장 빠른 시간인 session_id 한 줄 씩 추출하게 된다. 

 

즉 2019-02-21 에 session_id 별 첫 접속한 시간을 알 수 있다. 

 

 

 

 

 

 

댓글