320x100
실제로 한 현업에서 있던 사고 :
예제 : 직업이 PRESIDENT인 사원빼고 모든 사원들의 월급을 출력하기
select (decode(job,'PRESIDENT',null,sal))
from emp;
예제 : 위의 결과에서 최고 월급만 출력하기
select MAX(decode(job,'PRESIDENT',null,sal))
from emp;
** 3000이 아닌 950이 나온 이유
decode(job,'PRESIDENT,null,sal) 을 사용했을 때
세 번째 값 null이기 때문에, 네 번째 인자값인 sal이 문자형으로 암시적 형변환이 발생해버렸기 때문
위와 같이 sal을 문자형 기준으로 정렬하면, 맨 앞의 숫자인 9가 제일 큰 값으로 인식된다.
그래서 사고가 났다고 한다 ㅎ
그렇다면 어떻게 짰어야 했을까?
올바른 코드 : null 값이 아닌 0으로 바꾸자!
select max(decode(job,'PRESIDENT',0,sal))
from emp;
반응형
'나 취준생 > SQL' 카테고리의 다른 글
SQL - INDEX FULL SCAN, INDEX FAST FULL SCAN (0) | 2020.11.17 |
---|---|
SQL - UNIQUE INDEX (0) | 2020.11.17 |
SQL - full table scan, index range scan ( + 튜닝 ) (0) | 2020.11.16 |
SQL - 유저 생성, 삭제, 권한 부여, 회수 (0) | 2020.11.16 |
SQL - WITH 절 (0) | 2020.11.13 |