본문 바로가기
SQL/MySQL

MySQL ROWNUM 사용법 및 역순으로 배치하는 방법

by wakestand 2021. 3. 30.
반응형

MySQL에서도 오라클처럼 ROWNUM과 비슷하게

ROW 마다 번호를 매겨줄 수 있는데

 

@변수명 := 0;

으로 초기화 후

@변수명 := @변수명 + 1;

이런 식으로 사용하게 된다

 

먼저 사용 시 변수에 값이 지정되지 않은 만큼

초기화를 해줘야 하는데

SET @변수명 := 0;

이렇게 변수를 초기화해주지 않으면

 

 값 자체가 NULL인 상태이기 때문에

+1 을 하건 말건 다 NULL만 찍히게 된다

 

하지만 ROWNUM을 사용하면서 초기화해주지 않으면

숫자가 계속 증가하는 현상이 나오는데

 

오라클과 같은 개념으로 ROWNUM을 사용해 주려면

FROM / WHERE 절에서 초기화를 해줘야 한다

 

FROM에서 초기화할 경우에는

(SELECT @변수명 := 0) alias명

을 넣어주면 되고

 

WHERE에서 초기화할 경우에는

WHERE 절에

(@변수명 := 0) = 0;

을 넣어주면 된다

 

다음으로 ROWNUM 역순으로 깔아줄 경우에는

먼저 ROWNUM을 서브쿼리로 싼 후에

밖에서 ORDER BY ROWNUM명 DESC를 해주면

역순으로 깔리는 것이 보인다

 

마지막으로 예제에 사용한 전체 쿼리는 다음과 같다

 

-- 첫 사용시에는 초기화 필요 
SET @ROWNUM := 0

-- 초기화 쿼리가 없으면 조회할수록 계속 값 증가
SELECT @ROWNUM := @ROWNUM + 1 AS RN
  
-- FROM 에서 초기화
SELECT @ROWNUM := @ROWNUM + 1 AS RN
  FROM TB2 A, (SELECT @ROWNUM:=0) RN_TB

-- WHERE에서 초기화
SELECT @ROWNUM := @ROWNUM + 1 AS RN
  FROM TB2
 WHERE (@ROWNUM:=0) = 0;
  
-- 역순으로 정렬
  SELECT A.RN
    FROM (
           SELECT @ROWNUM := @ROWNUM + 1 AS RN
             FROM TB2 A, (SELECT @ROWNUM:=0) RN_TB
         ) A
ORDER BY RN DESC
반응형

댓글