선택장애

데이터베이스(DB) - CASE WHEN(예제, 문제풀이) 본문

데이터베이스(DB)

데이터베이스(DB) - CASE WHEN(예제, 문제풀이)

yes or yes 2017. 8. 14. 15:55
반응형

CASE WHEN은 조건에 따라 값을 주는건데 자바에서 if ,else if, else라고 생각하시면 편해요

●기본 문법
CASE 컬럼  
WHEN 조건1 THEN 값1 
WHEN 조건2 THEN 값2 
ELSE 값3 
END 
(컬럼이 조건1 일때는 값1을, 조건2 일때는 값2를 반환하고 조건에 맞지 않는 경우에는 값3을 반환하는 것입니다)

●앞에서 포스팅했지만 emp테이블 다시 한번 보여드릴게요

 



●예제
문제 1. DEPTNO컬럼의 10,20,30을 10번부서,20번부서,30번부서로 각각 바꾸고 이름과 바꾼부서 이름을 보이시오

SELECT ename 이름,  
    CASE WHEN DEPTNO = 10 THEN '10번 부서' 
            WHEN DEPTNO = 20 THEN '20번 부서' 
            WHEN DEPTNO = 30 THEN '30번 부서' 
    END 부서이름 
FROM emp;

\

 


●이제부터는 앞에 포스팅 했던 NVL과 조인을 합쳐서 한번 해볼게요
●먼저 조인할 dept 테이블입니다.

 


※dept테이블에는 40부서가 있지만 emp테이블에는 10 20 30만 있습니다.

●예제
문제 1. DEPTNO컬럼의 10,20,30,40을 10번부서,20번부서,30번부서,40번부서로 각각 바꾸고
40번 부서에는 사람이 없으니 '사람없음'을 넣고
사원번호(deptno)와 이름과 부서명을 보이시오 (제가 막 만들고 있는거라서 예제가 이상해요...)

 SELECT A.DEPTNO, NVL(B.ename ,'사람없음') 이름 ,  
    CASE WHEN A.DEPTNO = 10 THEN '10번 부서' 
            WHEN A.DEPTNO = 20 THEN '20번 부서' 
            WHEN A.DEPTNO = 30 THEN '30번 부서' 
            WHEN A.DEPTNO = 40 THEN '40번 부서' 
    END DEPTNO 
FROM dept A  LEFT OUTER JOIN emp B 
ON A.deptno = B.deptno;
/*외부조인을 해서 부서이름들을 바꾸고 NVL을 이용해서 비어있는곳은 사람없음으로 넣었어요*/

 



●문제 1번을 조금 더 심화해서 해볼까요
문제 2. DEPTNO컬럼의 10,20,30,40을 10번부서,20번부서,30번부서,40번부서로 각각 바꾸고 부서별로 합계와 평균을 나타내시오.

 SELECT  CASE WHEN dept.deptno = 10 THEN '10번 부서 ' 
                      WHEN dept.deptno = 20 THEN '20번 부서 ' 
                      WHEN dept.deptno = 30 THEN '30번 부서 ' 
                      WHEN dept.deptno = 40 THEN '40번 부서 ' 
             END deptno, 
SUM(SAL+NVL(COMM,0)) 합계  ,ROUND(AVG(SAL+NVL(COMM, 0)),2) 평균  
FROM dept LEFT OUTER JOIN emp 
ON emp.deptno = dept.deptno 
GROUP BY dept.deptno 
ORDER BY dept.deptno;

/*ROUND는 소수점을 자르는거에요 2번째자리 까지 잘랐어요
복잡해보이지만 앞 포스팅에서 하나씩 상세히 해드렸으니 천천히 해석해보세요*/

 

 

반응형