Oracle DBA/SQL

057 출력되는 행 제한하기 2(Simple TOP-n Queries)

Nuez 2023. 6. 30. 10:53
반응형

정렬된 결과에서 상위 몇 개의 데이터를 가져오는 방법 2가지 

1. ORDER BY 컬럼명 ASC/DESC FETCH FIRST 숫자 ROWS ONLY

2. ORDER BY 컬럼명 ASC/DESC FETCH FIRST 숫자 PERCENT ROWS ONLY


문제 287. 사원 테이블에서 이름, 월급을 출력하는데 월급이 높은 사원 4명만 출력하시오. 

SELECT  ename, sal
FROM emp
ORDER BY sal DESC FETCH FIRST 4 ROWS ONLY;



문제 288. 위의 결과를 fetch 대신 다른 방법으로 출력하시오. 

SELECT ename, sal
FROM(SELECT  ename, sal
	FROM emp
	ORDER BY sal DESC)
WHERE ROWNUM <=4;

 

이 코드의 단점: 

예를 들어 1억건의 행이 있는 emp 테이블이라면, 

 

1. emp의 전체 데이터를 기준으로 ORDER BY를 해서 1억건 다 정렬 

2. 그리고 4개만 SELECT 

=> 비효율


문제 289. 사원 테이블에서 이름, 월급을 출력하는데 월급이 상위 10%에 해당하는 사원들만 출력하시오.

SELECT ename, sal
FROM emp
ORDER BY sal DESC FETCH FIRST 10 PERCENT ROWS ONLY;