[Rank] 특정 컬럼으로 순위 매기기 「RANK() OVER 」
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) )
'DB' 카테고리의 다른 글
[SQL function] 거리 계산 함수 (0) | 2022.10.27 |
---|---|
[오라클] DB 에러 : table SYS.AUD$ by 8192 in tablespace (0) | 2022.04.21 |
[DB링크] CLOB 테이블 DB링크로 데이터없이 복사하기 (0) | 2021.02.02 |
테이블 컬럼명 select 조회용으로 (0) | 2021.01.30 |
[오라클]컬럼 지정조건 값 카운트 (0) | 2021.01.30 |