본문 바로가기
Programming_Language/Oracle_Sql

[Oracle] ROWNUM 대신 FETCH

by Cocopop 2023. 6. 15.
반응형

 

Oracle 12버전 이후에 나온 것으로 "행의 수를 제한하는 역할"를 담당한다.

MySql, MSSql, PostgreSql 같은 경우는 LIMIT를 사용이 가능해서 문제가 없지만

Oracle 경우는 LIMIT가 없어서 BETWEEN아니면 ROWNUM으로 사용해왔다.

 

ROWNUM를 쓰기 애매할 경우 FETCH를 이용해서 ROW 수를 제한해 보자.

 

 

[문법]

SELECT  A.flavor
FROM	(SELECT  A.flavor
			,   A.total_order
			,   SUM(B.total_order) AS total_order1
		FROM    FIRST_HALF    A   
				INNER JOIN  JULY  B
		ON      A.flavor = B.flavor
		GROUP   BY  A.flavor,A.total_order
		) A
GROUP BY A.flavor
ORDER BY SUM(A.total_order + A.total_order1) DESC
FETCH FIRST 3 ROWS ONLY

 -> 프로그래머스로 "주문량이 많은 아이스크림들 조회하기" 부분에서 사용한 코드인데

저 같은 경우는 ROWNUM를 사용하려 했지만, GROUP BY로 먹히지 않아 FETCH 방법으로 작성하였다.

 

결과

 

 

ORDER BY 진행 후 작성해야하며,

사용법은 

FETCH FIRST (ROW의 수) ROW ONLY 

-> 지정한 숫자가 없다면 1건만 가져옴.

 

 

 

OPTION

[ OFFSET offset ROWS]
FETCH  {FIRST | NEXT} [  row_count | percent PERCENT  ] ROWS  [ ONLY | WITH TIES ]

예)
OFFSET 5 ROWS 
FETCH NEXT 5 ROWS ONLY;

 

OFFSET : 시작 위치를 지정

FETCH : 출력 행의 점위 지정 

300x250