본문 바로가기 메뉴 바로가기

대표이미지

[Rank] 특정 컬럼으로 순위 매기기 「RANK() OVER 」

2022. 3. 4.

1. RANK OVER 특정 컬럼으로 단순 순위값 매기기

SELECT * FROM (
	SELECT  
        IMG_ID,
        CNT,
        RANK() OVER (ORDER BY CNT DESC) AS RANK_
    FROM (
        SELECT IMG_ID, COUNT(IMG_ID) AS CNT FROM IMAGE_LIKES_COUNT 
        GROUP BY (IMG_ID)    
    ) 
) ORDER BY RANK_ ASC

IMAGE_LIKES_COUNT라는 통계테이블이 있고 거기서 이미지 ID 별로 개수를 카운팅한 후에

카운트된 값 CNT 값으로 순위를 매기면 높은 수로 역순정렬 하였기에 

예를 들면,

50건이 RANK_ 값 1,

48건이 RANK_ 값 2, 

또 48건 RANK_ 값 2,

42건이 RANK_ 값 4

... 와 같은 형태로 중복되는 값은 같은 순위값, 그 다음 값은 중복되는 값을 카운팅한 다음 수 와 같은 형태로

순위값이 매겨지게 된다.

.

2. 특정 중복되는 키값(컬럼 복수가능) 중심으로 다른 특정컬럼 ORDER 값으로 순위값 매기기

SELECT * FROM (
    SELECT 
        ID_,
        IP_,
        LIKE_YN,

        RANK() OVER (
         PARTITION BY ID_, IP_
        ORDER BY RGST_DTM DESC ) AS RANK_

    FROM PHOTO_GALLERY_LIKES
    WHERE TO_CHAR(RGST_DTM, 'YYYYMMDD') BETWEEN '20220201' AND '20220228'
) 
WHERE  RANK_ = 1
AND LIKE_YN = 'Y'

예) PHOTO_GALLERY 테이블의 사진의 좋아요 HISTORY 데이터 중 RGST_DTM 등록날짜를 기준으로 

가장 최근값을 구하고 그 중 각 사진 ID값 / IP별로 좋아요 상태가 'Y'  인 경우 만을 추려낸다.

RANK_ = 1 이라는 건 날짜 ORDER BY 로 역순DESC 정렬하였으므로

"좋아요, 취소, 좋아요, 취소 " 순으로 눌렀을 경우 가장 최근 값은 취소상태 'N'가 된다. 

이런 식으로 먼저 좋아요를 누른 값이 Y상태의 이미지 ID, IP 순으로 추출하여 목록을 조회한다.

.

 - 통계로 적용하는 경우 한번 더 ID값과 COUNT(ID) 처리 ( GROUP BY ID 필요 )하여 

사진별 좋아요 누른 값의 갯수를 구할 수도 있다.

 - 등록날짜 값을 조회하지 않는 경우 전체값 중 지금 현재 좋아요 갯수를 구하게 된다.

.

RANK( ) OVER ( PARTITION BY A (또는 추가로 , B, C )   ORDER BY X ASC (또는 DESC)

댓글 갯수
TOP