본문 바로가기

Lobo's study room/오라클DB

[3일차 과제]급여 최고액, 최저액, 총액, 평균 구하기

EX1. 모든 사원의 급여 최고액, 최저액, 총액 및 평균액을 표시합니다. 
      열 레이블을 각각 Maximun, Minimum, Sum 및 Average로 지정하고 결과를 정수로 반올림하는 질의를 작성하시오.
SELECT MAX(SALARY) AS Maximum,
MIN(SALARY) AS Minimum,
SUM(SALARY) AS Sum,
ROUND(AVG(SALARY)) AS Average
FROM EMP;

EX2. 각 직무에 대한 급여 최저액, 최고액, 총액 및 평균액을 표시하도록 한다. 평균은 소숫점 둘째자리까지 표현하시오.
SELECT JOB_ID,MIN(SALARY),MAX(SALARY),SUM(SALARY),
ROUND(AVG(SALARY), 2)//소수점이 어디갔지?!
FROM EMP
GROUP BY JOB_ID;

EX3. 직무가 동일한 사원의 수를 표시하는 질의를 작성하시오.
SELECT JOB_ID,COUNT(*) AS 사원수
FROM EMP
GROUP BY JOB_ID;


EX4. 관리자 목록 없이 관리자 수만 표시하고 열 레이블을 Number of Managers로 지정합니다.
SELECT MANGER_ID,COUNT(*) AS "Number of Managers"
FROM EMP
GROUP BY MANAGER_ID;
===========================
SELECT COUNT(DISTINCT MANAGER_ID) AS "Number of Managers"
FROM EMP
GROUP BY MANAGER_ID;

EX5. 최고 급여와 최저 급여의 차액을 표시하는 질의를 작성하고 열 레이블을 DIFFERENCE로 지정하시오.
SELECT MAX(SALARY)-MIN(SALARY) AS DIFFERENCE
FROM EMP;
 

EX6. 관리자 번호 및 해당 관리자에 속한 사원의 최저 급여, 인원수를 표시합니다. 
      관리자를 알 수 없는 사원 및 최저 급여가 $5000 미만인 그룹 제외시키고 급여를 기준으로 출력 결과를 내림차순으로 정렬하시오.
SELECT MANAGER_ID, MIN(SALARY), COUNT(*)
FROM EMP
WHERE MANAGER_ID!=NULL&&MIN(SALARY)<5000
GROUP BY MANAGER_ID
ORDER BY SALARY DESC;
==================
SELECT MANAGER_ID,MIN(SALARY),COUNT(*)
FROM EMP
WHERE MANAGER_ID IS NOT NULL
GROUP BY MANAGER_ID
HAVING MIN(SALARY)>=5000
ORDER BY SALARY DESC;

EX7. 부서별 직무별 인원수 및  평균급여를 표시하는 질의를 작성하시오.
        단, 평균 급여를 소수점 둘째 자리에서 반올림하고, 
             부서번호 순으로 정렬하고 부서가 같으면 평균급여가 높은 직무순으로 정렬하시오.
SELECT DEPARTMENT_ID, JOB_ID, COUNT(*), ROUND(AVG(SALARY),1)
FROM EMP
GROUP BY DEPARTMENT_ID, JOB_ID
ORDER BY DEPARTMENT_ID, AVG(SALARY) DESC;

EX8. 총 사원의 수 및 2002,2003, 2004,2005년에 입사한 사원 수를 표시하는 질의를 작성하고 적합한 열 머리글을 지정합니다.

출력 예 ) 
TOTAL      2002     2003    2004    2005
107       7          6        10       29

SELECT COUNT(*), EXTRACT(YEAR FROM HIRE_DATE)
FROM EMP
WHERE EXTRACT(YEAR FROM HIRE_DATE) IN (2002,2003,2004,2005)
GROUP BY EXTRACT(YEAR FROM HIRE_DATE) ;

===============
SELECT COUNT(*) AS TOTAL,
SUM(DECODE(TO_CHAR(HIRE_DATE,'YYYY'),2002,1,0),
SUM(DECODE(TO_CHAR(HIRE_DATE,'YYYY'),2003,1,0)
SUM(DECODE(TO_CHAR(HIRE_DATE,'YYYY'),2004,1,0)
SUM(DECODE(TO_CHAR(HIRE_DATE,'YYYY'),2005,1,0)
FROM EMP;

SELECT COUNT(*) AS TOTAL,
SUM(CASE WHEN TO_CHAR(HIRE_DATE,YYYY) = '2002' THEN 1 END) AS "2002"
SUM(CASE WHEN TO_CHAR(HIRE_DATE,YYYY) = '2003' THEN 1 END) AS "2003"
SUM(CASE WHEN TO_CHAR(HIRE_DATE,YYYY) = '2004' THEN 1 END) AS "2004"
SUM(CASE WHEN TO_CHAR(HIRE_DATE,YYYY) = '2005' THEN 1 END) AS "2005"
FROM EMP;

SELECT COUNT(*) AS TOTAL,
COUNT(CASE WHEN TO_CHAR(HIRE_DATE,YYYY) = '2002' THEN 1 END) AS "2002"
COUNT(CASE WHEN TO_CHAR(HIRE_DATE,YYYY) = '2003' THEN 1 END) AS "2003"
COUNT(CASE WHEN TO_CHAR(HIRE_DATE,YYYY) = '2004' THEN 1 END) AS "2004"
COUNT(CASE WHEN TO_CHAR(HIRE_DATE,YYYY) = '2005' THEN 1 END) AS "2005"
FROM EMP;

'Lobo's study room > 오라클DB' 카테고리의 다른 글

[5일차]set 연산자  (0) 2022.02.10
[4일차]서브쿼리  (0) 2022.02.10
[3일차]JOIN 함수  (0) 2022.02.10
[2일차 과제]단일행 함수  (0) 2022.02.10
[2일차]함수  (0) 2022.02.10