본문 바로가기

Database/MySQL

[MySQL] ROW_NUMBER

Oracle에서 제공하는 ROW_NUMBER함수를 MySQL에서는 사용할 수 없어서 직접 구현해야 한다.


※ 번호

SELECT @rownum:=@rownum+1 AS ROW_NUMBER

FORM TABLE_NAME

,(SELECT @rownum := 0) T


- TABLE_NAME : 사용하는 테이블명

- (SELECT @rownum := 0) : rownum 초기화

- @rownum:=@rownum+1 : 증감


※ 그룹별 번호 

ORACLE은 하기와 같이 가능한 기능을 구현해야 한다.


SELECT ROW_NUMBER() OVER(PARTITION BY COL_NAME1 ORDER BY COL_NAME2) AS RNUM

FROm TABLE_NAME


SELECT (CASE @vData WHEN COL_NAME1 THEN @rownum:=@rownum+1 ELSE @rownum:=1 END) AS ROW_NUMBER,

(@vData:=COL_NAME1) AS vData

FROM TABLE_NAME

,(SELECT @vData:='', @rownum:=0) T


- (SELECT @vData:='', @rownum:=0) : 초기화

- (CASE @vData WHEN COL_NAME1 THEN @rownum:=@rownum+1 ELSE @rownum:=1 END) 동일한 컬럼(COL_NAME!)인 경우 증가 아닌 경우 1로 초기화

- (@vData:=COL_NAME1) : 이전 컬럼(COL_NAME1) 데이터 저장


※ rownum, vData 임의에 데이터명을 쓰시면 됩니다.