출력되는 행 제한하기 (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;
→ 정렬된 결과에서 상위 몇개의 데이터를 가져오는 방법
- order by 컬럼 asc/desc fetch first 숫자_ rows only (정렬된결과에서 숫자만큼의 결과를 가져와라)
- 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;
'Oracle > SQL' 카테고리의 다른 글
SQL Oracle Join - NON Equi join 여러 테이블 조인 (컬럼간 연결고리 = X) (0) | 2021.11.22 |
---|---|
SQL Oracle Join - Equi join 여러 테이블 조인 (공통컬럼 O) (0) | 2021.11.22 |
SQL ROWNUM - 출력되는 행 제한시키기 (0) | 2021.11.22 |
SQL 데이터 변환 - Pivot , Unpivot (0) | 2021.11.22 |
SQL Sum + Decode 컬럼을 행으로 바꿔 출력 (0) | 2021.11.22 |