[SQL] 분석함수 ROW_NUMBER

·2025년 7월 7일
0

SQL

목록 보기
70/126

문제1. 직업이 SALESMAN 인 사원들의 이름, 월급, 직업을 출력하시오

select ename, sal, job
 from emp
 where job='SALESMAN';

문제2. 위에서 출력되는 결과 앞에 번호를 순서대로 부여해서 출력하시오

select rownum as 번호, ename, sal, job
 from emp
 where job='SALESMAN';

💡 rownum 함수는 출력되는 결과에 번호를 붙여줌

문제3. 부서번호가 10번, 20번인 사원들의 이름과 월급과 부서번호를 출력하는데 출력할때 앞에 번호를 넘버링해서 출력하시오

select rownum 번호, ename, sal, deptno
 from emp
 where deptno in(10,20);

문제4. 사원 테이블에서 모든 컬럼의 데이터를 출력하는데 위에 3줄만 출력하시오

select *
 from emp
 where rownum <= 3;

💡 ROWNUM 은 대용량 테이블의 데이터의 일부를 빨리 확인하고 싶을 때 유용

문제5. 직업이 SALESMAN 인 사원들의 이름과 월급과 직업을 출력하는데 앞에 ROWNUM 을 이용해서 숫자를 넘버링해서 출력하시오

select rownum 번호, ename, sal, job
 from emp
 where job='SALESMAN';

문제6. 위의 결과를 다시 출력하는데 월급이 높은 사원부터 출력하시오

⚠️ 잘못된 코드

select rownum 번호, ename, sal, job
 from emp
 where job='SALESMAN'
 order by sal desc;

실행순서가 from - where - select - order by 라서
order by절가장 마지막에 실행되니까
번호가 순서대로 안나옴


✔️ 답: 방법 1

select rownum 번호, ename, sal, job
 from (
        select ename, sal, job
            from emp
            where job='SALESMAN'
            order by sal desc
       );

from절의 서브쿼리
오라클메모리(PGA)

💡 실행순서
: 서브쿼리 (from -> where -> select -> order by) -> 메인쿼리 select


✔️ 답: 방법 2

select row_number() over (order by sal desc) 번호, ename, sal, job
 from emp
 where job='SALESMAN';

💡 row_number() 함수를 사용하면 서브쿼리를 쓰지 않아도 됨
row_number()와 같은 데이터 분석함수(윈도우 함수)는 select절에만 사용가능


문제7. emp21 테이블에서 통신사가 SKT 인 학생들의 이름과 나이와 통신사를 출력하는데 나이가 높은 학생부터 출력하고 앞에 번호가 같이 출력되게하시오

select row_number() over (order by age desc) 번호, ename, age, telecom
 from emp21
 where telecom='SKT';

0개의 댓글