반응형
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
반응형
'SQL > MySQL' 카테고리의 다른 글
MySQL STR_TO_DATE 함수 포맷 사용방법 정리 (0) | 2021.04.08 |
---|---|
MySQL DAYOFWEEK DAYOFMONTH DAYOFYEAR 사용방법 정리 (0) | 2021.04.06 |
MySQL 날짜 포맷 사용방법 정리(DATE_FORMAT) (0) | 2021.03.30 |
MySQL 날짜 더하는 방법 빼는 방법(DATE_ADD DATE_SUB) (0) | 2021.03.29 |
MySQL RAND 함수 사용법 및 범위 지정방법 (1) | 2021.03.16 |
댓글