본문 바로가기

기초 튼튼/시행착오노트

[시행착오노트] MySQL rank 함수 구현

 

활용?

  • 그룹별 rank를 row별로 사용할 때 활용
  • 랭크 순위 기준을 order by를 통해 적용, 그룹 기준을 partition by를 통해 적용
  • 다수의 컬럼에 적용 가능
  • MySQL에서는 기본 제공되지 않은 함수로 커스터마이징하여 활용해야함

 

ORACLE, Redshift 등 다른 RDB 내의 함수

select rank () over (partition by GROUP_COL order by ORDER_COL) as rank_colname

 

My SQL 예시

select *
	from
	(
      select @ROW_NUM := IF(@PREV_VALUE = A.GROUP_COLNAME, @ROW_NUM + 1, 1) AS ROW_NUMBER,
          @PREV_VALUE := A.GROUP_COLNAME,
          A.*
          from
          (
            select *
            	from temp_table
          ) A,
          (SELECT @ROW_NUM := 1) X,
          (SELECT @PREV_VALUE := '') Y
  	) t1

 

 

 

레퍼런스:

https://tyboss.tistory.com/entry/MySQL-Oracle%EC%98%A4%EB%9D%BC%ED%81%B4%EC%9D%98-ROWNUM-ROWNUMBER-PARTITION-BY-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0

 

[MySQL] Oracle(오라클)의 ROWNUM, ROW_NUMBER (PARTITION BY) 구현하기

1. ROWNUM 구현하기  SELECT @RNUM := @RNUM + 1 AS RNUM            , A.*    FROM 테이블 A            , (SELECT @RNUM := 0) B 2. ROW_NUMBER(PARTITION BY ...) 구현하기 참고 : htt..

tyboss.tistory.com

 

http://www.coolio.so/mysql%ec%97%90%ec%84%9c-%ea%b7%b8%eb%a3%b9%eb%b3%84-ranking-%ea%b5%ac%ed%95%98%ea%b8%b0/

 

MYSQL에서 그룹별 RANKING 구하기

RANKING을 구할 때 공부를 위해서는 특정값을 기준으로 구하면 되지만 실제 업무를 하다보면 특정값을 기준으로 하되 그룹별로 RANKING을 구해야 하는 경우가 태반이다. ORACLE에서는 간단하게 RANKING

www.coolio.so

 

반응형