문제) 사원의 총수, 급여가 1500 이상인 사원의 수와 비율을 아래와 같이 알고 싶습니다.

      (비율은 소숫점 이하 둘째자리까지 반올림)



총사원수 급여>=1500      비율

--------- ----------- ----------

      14          8    57.14%



풀이) 아래와 같은 집합을 생각하세요.


     총수 급여>=1500

---------- ----------

      800        

     1600       1600

     1250       

     2975       2975

     1250       

     2850       2850

     2450       2450

     3000       3000

     5000       5000

     1500       1500

     1100       

      950        

     3000       3000

     1300   


위 집합의 각 컬럼에 count 함수를 적용하면 문제를 해결할 수 있습니다.


위와 같은 집합을 만들기 위한 쿼리를 작성해보면



     1) DECODE 함수 사용


select sal, sal

from emp;


↓ ↓ ↓ 


select sal as 총사원수

, decode(trunc(sal/1500), 0, to_number(null), sal) as "급여>=1500"

from emp; 



↓ ↓ ↓ 


select count(sal) as 총사원수

, count(decode(trunc(sal/1500), 0, to_number(null), sal)) as "급여>=1500"

from emp; 



↓ ↓ ↓ 


select count(sal) as 총사원수

, count(decode(trunc(sal/1500), 0, to_number(null), sal)) as "급여>=1500"

, round(count(decode(trunc(sal/1500), 0, to_number(null), sal)) / count(sal) * 100, 2)||'%' as 비율

from emp; 




     2) CASE expression 사용


select sal, sal

from emp;


↓ ↓ ↓ 


select sal as 총사원수

, case when sal >= 1500 then sal end as "급여>=1500"

from emp;



↓ ↓ ↓ 


select count(sal) as 총사원수

, count(case when sal >= 1500 then sal end) as "급여>=1500"

from emp;



↓ ↓ ↓ 


select count(sal) as 총사원수

, count(case when sal >= 1500 then sal end) as "급여>=1500"

, count(case when sal >= 1500 then sal end) / count(sal) as 비율

from emp;



↓ ↓ ↓ 


select count(sal) as 총사원수

, count(case when sal >= 1500 then sal end) as "급여>=1500"

, round(count(case when sal >= 1500 then sal end) / count(sal) * 100, 2)||'%' as 비율

from emp;


+ Recent posts