hyeonga_code

Database_61_SQL 활용 실습 5 본문

Oracle Database

Database_61_SQL 활용 실습 5

hyeonga 2023. 8. 19. 06:59
반응형



    -- PRACTICE 5
-- 모든 사원의 급여 최고액, 최저액, 총액 및 평균액을 표시
    -- 열 레이블을 각각 Maximum, Minimum, Sum 및 Average로 지정하고 결과를 정수로 반올림하도록 작성
SELECT ROUND(MAX(salary), 0) AS "Maximum", ROUND(MIN(salary), 0) AS "Minimum", ROUND(SUM(salary), 0) AS "Sum", ROUND(AVG(salary), 0) AS "Average"
FROM employees;



-- 위의 질의를 수정하여 각 업무 유형(job_id)별로 급여 최고액, 최저액, 총액 및 평균액을 표시
SELECT job_id, ROUND(MAX(salary), 0) AS "Maximum", ROUND(MIN(salary), 0) AS "Minimum", ROUND(SUM(salary), 0) AS "Sum", ROUND(AVG(salary), 0) AS "Average"
FROM employees
GROUP BY job_id;



-- 업무별 사원 수를 표시하는 질의를 작성
SELECT job_id, COUNT(*)
FROM employees
GROUP BY job_id;



-- 관리자 수를 확인하시오. 열 레이블은 Number of Managers로 지정하시오. (힌트: MANAGER_ID 열을 사용)
SELECT COUNT(DISTINCT manager_id) AS "Number of Managers"
FROM employees;


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


-- 관리자 번호 및 해당 관리자에 속한 사원의 최저 급여를 표시
    -- 관리자를 알 수 없는 사원 및 최저 급여가 6,000 미만인 그룹은 제외시키고 결과를 급여에 대한 내림차순으로 정렬
SELECT manager_id, MIN(salary) 
FROM employees
WHERE manager_id IS NOT NULL
GROUP BY manager_id
HAVING MIN(salary)>6000
ORDER BY MIN(salary) DESC;



-- 관리자 ID가 120보다 작은 관리자를 둔 사원에 대해 다음을 표시하는 질의를 작성
    /*
    ? 관리자 ID
    ? 같은 관리자를 둔 사원에 대한 업무 ID별 총 급여와 해당 업무 ID
    ? 해당 관리자의 총 급여
    ? 업무 ID에 상관 없는 해당 관리자의 총 급여
    */
SELECT manager_id, job_id, SUM(salary)
FROM employees
WHERE manager_id<120
GROUP BY ROLLUP(manager_id, job_id);



-- 이전 질문의 출력을 살펴본 다음, GROUPING 함수를 사용하여 GROUP BY 표현식의 해당 열에 있는 NULL 값이 ROLLUP 연산으로 인한 것인지 확인하는 질의를 작성
SELECT manager_id, job_id, sum(salary), GROUPING(manager_id), GROUPING(job_id)
FROM employees
WHERE manager_id<120
GROUP BY ROLLUP(manager_id, job_id);



-- 관리자 ID가 120보다 작은 관리자를 둔 사원에 대해 다음을 표시하는 질의를 작성
    /*
    ? 관리자 ID 
    ? 같은 관리자를 둔 사원에 대한 업무별 총 급여와 해당 업무
    ? 해당 관리자의 총 급여
    ? 관리자에 상관 없이, 업무별 총 급여를 표시하는 교차 도표화 값
    ? 업무에 상관 없는 전체 총 급여
    */
SELECT manager_id, job_id, SUM(salary)
FROM employees
WHERE manager_id<120
GROUP BY CUBE(manager_id, job_id);



-- 이전 질문의 출력을 살펴본 다음, GROUPING 함수를 사용하여 GROUP BY 표현식의 해당 열에 있는 NULL 값이 CUBE 연산으로 인한 것인지 확인하는 질의를 작성
SELECT manager_id, job_id, SUM(salary), GROUPING(manager_id), GROUPING(job_id)
FROM employees
WHERE manager_id<120
GROUP BY CUBE(manager_id, job_id);



-- GROUPING SETS를 사용하여 다음 그룹화를 표시하는 질의를 작성,  해당 그룹별 급여의 합을 계산
    /*
    ? department_id, manager_id, job_id
    ? department_id, job_id
    ? manager_id, job_id
    */
SELECT department_id, manager_id, job_id, SUM(salary)
FROM employees
GROUP BY GROUPING SETS ((department_id, manager_id, job_id), (department_id, job_id), (manager_id, job_id));

반응형

'Oracle Database' 카테고리의 다른 글

Database_61_SQL 활용 실습 7  (0) 2023.08.19
Database_61_SQL 활용 실습 6  (0) 2023.08.19
Database_61_SQL 활용 실습 4  (0) 2023.08.19
Database_61_SQL 활용 실습 3  (0) 2023.08.18
Database_61_SQL 활용 실습 2  (0) 2023.08.18