본문 바로가기

프로그래밍/데이터베이스[DB]

[MySQL] ROWNUM 으로 번호 매기기, 역순 포함



 

Mysql을 쓰다 보면 Oracle처럼 rownum을 써야 하는 경우가 생깁니다.

 

따라서 오늘은 Mysql에서 ROWNUM의 사용 방법에 대해 소개해드리고자 합니다.

 

자 우선 간단한 TEST 테이블의 데이터입니다.

 

 

 

REG_DATE(등록 날짜)를 기준으로 오름차순을 한 경우입니다.

 

  SELECT  @ROWNUM := @ROWNUM + 1 AS ROWNUM,
          T.*
    FROM  TEST T,(SELECT @ROWNUM := 0 ) TMP
ORDER BY  REG_DATE ASC

 

 

 

 

REG_DATE(등록 날짜)를 기준으로 내림차순을 한 경우입니다.

 SELECT   @ROWNUM := @ROWNUM + 1 AS ROWNUM,
          T.*
    FROM  TEST T,(SELECT @ROWNUM := 0 ) TMP
ORDER BY  REG_DATE ASC

 

 

 

 

자 다음으로는 ROWNUM의 순서를 역순으로 매기는 방법입니다.

 

역순을 매기는 방법은 서브 쿼리를 이용하여 ROWNUM을 부여하고 이 ROWNUM으로 다시 정렬하는 방법입니다.

 

REG_DATE를 오름차순으로 정렬하고 이를 역순으로 출력하는 쿼리입니다.

   SELECT *
    FROM  (SELECT  
                  @ROWNUM := @ROWNUM + 1 AS ROWNUM,
                  T.*
            FROM  TEST T,
                  (SELECT @ROWNUM := 0 ) TMP
        ORDER BY  REG_DATE ASC)SUB 
ORDER BY SUB.ROWNUM DESC

 

결과값을 보면 REG_DATE를 오름차순으로 ROWNUM을 매기고 이를 역순으로 출력합니다.

 

 

 

 

그리고 REG_DATE를 내림차순으로 정렬하고 역순으로 출력하는 쿼리입니다.

   SELECT *
    FROM  (SELECT  
                  @ROWNUM := @ROWNUM + 1 AS ROWNUM,
                  T.*
            FROM  TEST T,
                  (SELECT @ROWNUM := 0 ) TMP
        ORDER BY  REG_DATE DESC)SUB 
ORDER BY SUB.ROWNUM DESC

 

위를 참고하시고 본인이 원하는 쓰임새를 보고 맞게 사용하시면 됩니다.

 

그리고 중요한 것은, 조인 연산에서도 ROWNUM을 사용할 수 있지만 우선적으로 서브 쿼리에서 ORDER BY를 통해서 정렬하신 후 ROWNUM를 매겨야 원하는 값이 나올 수 있습니다.

 

결론적으로 엉뚱한 연산이 안되게 하기 위해선 서브 쿼리에서 정렬을 한 후 ROWNUM을 매길 수 있도록 쿼리를 짜도록 해야 합니다.

 

이상입니다.

 

감사합니다.