2014/05/02

[MySQL] ROWNUM 구하기

MySQL은 ORACLE이나 MSSQL처럼 ROW_NUMBER() OVER() 함수가 지원되지 않는다.
대신 sql문 내에서 변수(@변수명)가 지원된다.
SELECT A, B, @RNUM := @RNUM + 1 AS RNUM
  FROM T
     , (SELECT @RNUM := 0) A

위 처럼 인라인뷰에서 변수 선언 및 초기화를 하고 SELECT 절에서 ROW 만큼 1씩 증가시키는 구조.

추가로 PARTITION BY 를 쓸려면...
변수를 하나 더 쓰면 된다
SELECT A, B
     , CASE WHEN @V_A = A THEN @RNUM ELSE @RNUM := @RNUM + 1 END AS RNUM
     , @V_A := A
  FROM T
     , (SELECT @V_A := 0, @RNUM := 0) A

sql내에서 변수가 지정되다보니 변수를 아주 유용하게 활용할 수 있다.

댓글 없음:

댓글 쓰기