썩구노트
[MySQL] rownum을 사용하여 조회된 결과에 번호붙이기 본문
MySql에서 Oracle에서 처럼 ROWNUM을 구하기 위한 방법을 찾다가 세션변수를 이용한 방법을 찾게 되었습니다.
@rownum 을 사용하는 방법인데,
어떻게 활용하는지 알아보겠습니다.
▶ 사용법 1 SET 구문을 사용하여 초기화
▶ 사용법 2 FROM절에서 초기화
▶ 사용법 3 WHERE절에서 초기화
▶ 사용예제
▶ 초기화 구문이 없을 경우
▶ JOIN문이 포함된 경우
SELECT 구문에 ROW번호를 구하기 위한 수식을 추가합니다.
@rownum:=@rownum+1
▶ 사용법 1 SET 구문을 사용하여 초기화
SET 구문을 사용하여 조회하기 전에 rownum을 초기화 하고, 데이터를 조회합니다.
SET @rownum:=0;
SELECT
@rownum:=@rownum+1
FROM 테이블명;
▶ 사용법 2 FROM절에서 초기화
FROM 절에 rownum을 초기화하는 SUB 테이블을 붙여서 조회합니다.
SELECT
@rownum:=@rownum+1
FROM 테이블명
, (SELECT @rownum:=0) TMP;
▶ 사용법 3 WHERE절에서 초기화
WHERE 절에 rownum을 초기화하는 조건을 붙여서 조회합니다.
SELECT
@rownum:=@rownum+1
FROM 테이블명
WHERE (@rownum:=0)=0;
▶ 사용예제
SET @rownum:=0;
SELECT
@rownum:=@rownum+1, CRE_DTM
FROM TB_API_ACCESS_LOG;
SELECT
@rownum:=@rownum+1, CRE_DTM
FROM TB_API_ACCESS_LOG
, (SELECT @rownum:=0) TMP;
SELECT
@rownum:=@rownum+1, CRE_DTM
FROM TB_API_ACCESS_LOG
WHERE (@rownum:=0)=0;
위 사용법1,2,3의 예제를 모두 실행해보니, 아래 그림과 같이 모두 동일한 결과값이 나왔습니다.
▶ 초기화 구문이 없을 경우
만약, 초기화 구문을 넣지않고 @rownum:=@rownum+1 만으로 데이터를 조회하게 된다면, 조회할 때마다 rownum값이 매번 바뀌는 결과가 나타납니다.
그러므로 @rownum:=0 과 같이 rownum 변수를 초기화 해주는 구문을 추가해 주어야 결과값이 정상으로 나타납니다.
▶ JOIN문이 포함된 경우
사용법2를 사용할 때, FROM 절에 JOIN문이 포함되어 있을 경우, 초기화 구문을 추가하는 두가지 방법이 있습니다.
① SUB 테이블 사용하기
(SELECT @rownum:=0) TMP; 을 JOIN문 아래에 추가합니다.
SELECT
@rownum:=@rownum+1 AS ROW_NUM
, APPINFO.APP_NM AS APP_NAME
, CODE.CD_NM AS OS_NAME
, DATE_FORMAT(LOG1.CRE_DTM, '%Y-%m-%d %H:%i:%s') AS CRE_DTM
FROM TB_API_ACCESS_LOG LOG1
LEFT OUTER JOIN TB_SVC_NOTICE_CD CODE ON (LOG1.OS_TYPE = CODE.NOTICE_CD)
LEFT OUTER JOIN TB_SVC_APP_INFO APPINFO ON (LOG1.APPKEY = APPINFO.APP_KEY)
, (SELECT @rownum:=0) TMP
② INNER JOIN 을 사용하기
INNER JOIN (SELECT @rownum:=0) T2 을 조회할 테이블 다음에 추가합니다.
SELECT
@rownum:=@rownum+1 AS ROW_NUM
, APPINFO.APP_NM AS APP_NAME
, CODE.CD_NM AS OS_NAME
, DATE_FORMAT(LOG1.CRE_DTM, '%Y-%m-%d %H:%i:%s') AS CRE_DTM
FROM TB_API_ACCESS_LOG LOG1
INNER JOIN (SELECT @rownum:=0) T2
LEFT OUTER JOIN TB_SVC_NOTICE_CD CODE ON (LOG1.OS_TYPE = CODE.NOTICE_CD)
LEFT OUTER JOIN TB_SVC_APP_INFO APPINFO ON (LOG1.APPKEY = APPINFO.APP_KEY)
참고 : MySQL에서 rownum 사용하기
'DB' 카테고리의 다른 글
DISTINCT 와 GROUP BY의 차이 (0) | 2016.11.01 |
---|---|
MySQL 성능 죽이는 잘못된 쿼리 습관 (0) | 2016.10.28 |
where절에 if문처럼 and조건 사용하기 (0) | 2016.10.28 |
MySQL 함수를 활용한 날짜비교 쿼리문 작성하기 [출처] MySQL 함수를 활용한 날짜비교 쿼리문 작성하기|작성자 네오 에이치 (0) | 2016.10.28 |
MySQL 날짜 더하기와 빼기 (0) | 2016.10.28 |