ㅁ 복습
1.rownum
2. row_number()
3. order by 컬럼명 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, lower(telecom)
from emp14_address
where lower(telecom) = 'kt'
order by age desc fetch first 20 percent rows only;
문제273. 사원테이블에서 직업이 SALESMA, ANALYST인 사원들의 이름과 월급과 직업을 출력하는데 이중에서 월급이 상위5%에 해당하는 사원들만 출력하시오
select ename, sal, job
from emp
where job in ('SALESMAN', 'ANALYST')
order by sal desc fetch first 5 percent row only;
문제274. 사원번호, 이름, 직업, 월급을 출력하는데 월급이 높은 사원의 순위가 1등과 2등만 출력하시오
select *
from (
select empno, ename, job, sal, rank() over (order by sal desc) 순위
from emp
)
where 순위 in (1,2);
/* 이렇게 풀 경우 2명만 나오는거지 2등까지 나오는게 아님
select empno, ename, job, sal
from emp
order by sal desc fetch first 2 rows only;
*/
-- 따라서, 동급인 경우 with ties로 작성해야함
select empno, ename, job, sal
from emp
order by sal desc fetch first 2 rows with ties;
/* with ties는 같은 데이터가 있다면 묶어서 같이 나오게 하라는 의미 > 즉, 데이터가 묶임
순위를 출력할 일이 있으면 그냥 rank를 쓰는게 편함*/
문제275. 위의 결과를 다시 출력하는데 월급의 순위가 3등까지 출력하시오
select *
from (
select empno, ename, job, sal, dense_rank() over (order by sal desc) 순위
from emp
)
where 순위 in (1,2,3);
-- fetch는 dense_rank가 아닌 rank로 수행됨
ㅁ정리
1. 순위 출력 : rank
2. 정렬된 결과에서 상위 몇 개의 데이터(퍼센트)를 가져오는 경우 : order by fetch
3. 출력된 결과에서 맨 위의 행들을 가져오는 경우 : rownum
-- 월급이 1000에서 3000사이인 사원들의 사원번호, 이름, 월급을 출력하는데 맨 위에 3개 출력하시오
select empno, ename, sal
from emp
where sal between 1000 and 3000;
and rownum <= 3;
-- rownum은 1~n번까지의 결과만 뽑아낼 수 있음. n번째 결과만 뽑아낼 수 없음
반응형
'Study > class note' 카테고리의 다른 글
문제4. SQL / rollup하여 생긴 null값에 데이터 입력하기 (0) | 2021.11.12 |
---|---|
sql중급 / equi join, non equi join, outer join, self join (0) | 2021.11.12 |
sql기본 / rollup, cube, grouping sets, row_number (0) | 2021.11.11 |
문제3. SQL / class_type, 통신사, 인원수를 출력하기 (0) | 2021.11.10 |
sql기본 / 데이터 분석 함수(unpivot, sum+over, ratio_to_report, rollup) (0) | 2021.11.10 |