본문 바로가기

Oracle/SQL

SQL fetch first ___ rows only - 출력되는 행 제한시키기

출력되는 행 제한하기 (fetch first 몇개 rows only)

rownum 을 쓰면서 서브쿼리 안쓰고 간단하게 순위를 출력하는방법

문제 269 :이름,월급,직업 출력 월급이 높은 사원 부터 출력

select ename, sal, job 
from emp
order by sal desc;

 

문제 270 : 위의 출력 결과에서 위쪽 네명만 출력하시오

select ename, sal, job
from emp 
order by sal desc fetch first 4 rows only;

→ ordering 된 (정렬된결과에서 ) 위의 4개의 행만 출력합니다.

문제 : 통신사가 kt 인 학생들의 이름, 나이, 통신사를 출력하는데 나이가 많은 순서대로 정렬된결과에서 위의 3명의 학생들만 출력하시오

select ename, age, lower(telecom)
from emp14_address
where lower(telecom) = 'kt' 
order by age desc fetch first 3 rows only;

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

  1. order by 컬럼 asc/desc fetch first 숫자_ rows only (정렬된결과에서 숫자만큼의 결과를 가져와라)
  2. order by ______ asc/desc fetch first ______ percent rows only (상위 몇프로를 뽑아라)

문제 272 : 우리반에서 통신사가 kt 인 학생들 중에서 나이가 높은 학생들로 상위 20% 에 해당하는학생들의 이름과 나이를 출력하시오

select ename, age
from emp14_address 
where telecom = 'kt' 
order by age desc fetch first 20 percent rows only;

문제 273 : 사원테이블에서 직업이, 세일즈맨 어널리스트인 사원들의 이름과 월급과 직업을 출력하는데 이중에서 월급이 상위5% 인 사람만 출력

select ename, sal, job 
from emp
where job in ('SALESMAN','ANALYST')
order by sal desc fetch first 5 percent rows only;

문제 : 274 사원번호, 이름 직업 월급을 출력하는데 월급이 높은 사원의 순위가 1,2 등만 출력하세요.

select * 
from (
      select empno, ename, job, sal,rank () over( order by sal desc )순위 
      from emp
      )
where 순위 in(1,2);

→ 위와같이 작성하면 답은 나오지만 너무 긴 쿼리문이 되므로 조금더 간단하게 식을 작성하면 

fetch first 숫자 rows only (or with ties) 를 이용할 수 있다. 

select empno, ename, job, sal 
from emp 
order by sal desc fetch first 2 rows with ties;

→ with ties 를 사용하게 되면 같은 데이터(월급)이 묶어서 나온다.


상위 n 명을 뽑으려고 하면 fetch

순위를 뽑으라고 하면 rank 를 사용한다. (그 순위의 몇개를 뽑으려면 서브쿼리)


문제 275 : 월급이 1000에서 3000 사이인 사원들의 사원번호, 이름, 월급을 출력하는데 맨위의 3개의 행만 출력하시오

select empno,ename, sal
from emp 
where sal between 1000 and 3000 
      and rownum <= 3;