연봉(Total_sal)이 가장 높은 1등, 2등, 3등을 출력하는 코드다.
select name as Full_name,
substr(name,1,(instr(name,' ')-1)) as Fmaily_name,
substr(name,(instr(name,' ')),20) as Given_name,
HIRE_DATE,
to_char(SALARY*12, '$999,999,999') as Total_sal
from employees
order by Total_sal desc
where rownum < 4
;
만약 내가 4등을 출력하고싶어~ 혹은 4등 이상부터 보고싶어~ 라고 할 때,
where rownum = 4 (혹은 >= 4)
이러면 no rows selected 뜨는 이유는?
rownum()
요건 데이터를 불러올 때 '하나씩 번호를 붙여서' + '1번부터 순차적으로' 출력한다. 그런데 여기서 붙이는 번호는 rownum이 임의로 붙이는거지 데이터베이스에 있는게 아니라서,
갑자기 4등 출력! 이러면 엥? 데이터베이스에 1 2 3번 없는데? 하고 no rows selected가 난다
desc 테이블A
로 출력해보면 칼럼에 rownum이 없는데
select rownum, 칼럼1, 칼럼2 from 테이블A
로 출력하면 1 2 3 4 ... 가 출력이 된다...ㅎㅎ;
그럼 4등만 출력을 어떻게 할까? 서브쿼리를 이용한다.
성공!
select *
from (select rownum as r2
, name as Full_name
, substr(name,1,(instr(name,' ')-1)) as Fmaily_name
, substr(name,(instr(name,' ')),20) as Given_name
, HIRE_DATE
, to_char(SALARY*12, '$999,999,999') as Total_sal
from (select rownum as r1
, name
, substr(name,1,(instr(name,' ')-1))
, substr(name,(instr(name,' ')),20)
, HIRE_DATE
, SALARY
from employees
order by SALARY desc)
)
where r2 = 4
;
'데이터베이스 > Oracle' 카테고리의 다른 글
[Oracle] NVL, NVL2 함수 (0) | 2022.12.06 |
---|---|
연봉 높은 순으로 정렬하기 (0) | 2022.12.04 |
[Oracle] 공백을 기준으로 문자열 자르기 (0) | 2022.12.02 |
[Oracle] '_(언더바)'가 들어간 데이터 찾기 (0) | 2022.12.02 |
rollback 롤백 (0) | 2022.11.30 |