본문 바로가기

SQL

#46 [SQL] 그룹함수 연습문제

<순서>

SELECT 

FROM 

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

WHERE       : 조건절

GROUP BY  : 부분 집계

HAVING        : 그룹함수 조건절

ORDER BY   : 정렬은 마지막


연습문제 1) 모든 사원의 급여(SALARY) 최고액, 최저액, 총액 및 평균 급여를 출력하세요.
컬럼의 별칭은 : 최고액, 최저액, 총액, 평균급여
단, 실수가 나오면 반올림 해주세요(ROUND)
SELECT MAX(SALARY) AS 최고액, 
        MIN(SALARY) AS 최저액, 
        SUM(SALARY) AS 총액, 
        ROUND(AVG(SALARY)) AS 평균급여
FROM EMPLOYEE;

연습문제 2) 각 담당 업무(직위)(JOB) 유형별로 급여(SALARY) 최고액, 최저액, 총액 및 평균액을 출력하세요.
컬럼의 별칭은 : 최고액, 최저액, 총액, 평균급여
단, 실수가 나오면 반올림 해주세요(ROUND)
SELECT JOB, MAX(SALARY) AS 최고액, 
 	 MIN(SALARY) AS 최저액, 
   	  SUM(SALARY) AS 총액, 
 	 ROUND(AVG(SALARY)) AS 평균급여
FROM EMPLOYEE
GROUP BY JOB;

연습문제 3) 담당업무별로(JOB) count(*) 함수를 이용하여 사원 수를 출력하세요.
SELECT JOB, COUNT(*)
FROM EMPLOYEE
GROUP BY JOB;

연습문제 4) 관리자(MANAGER) 수를 출력하세요
(MANAGER 컬럼의 데이터 개수를 나열하세요.)
SELECT COUNT(*)
FROM EMPLOYEE
WHERE JOB LIKE '%MANAGER%';	// 이거는 JOB 이 MANAGER 인 갯수

 

SELECT COUNT(MANAGER)
FROM EMPLOYEE;			// 이게 MANAGER 컬럼의 갯수

연습문제 5) 급여(SALARY) 최고액과 급여 최저액의 차액을 출력하세요.
컬럼의 별칭은 "차액"으로 표기하세요
SELECT MAX(SALARY) - MIN(SALARY) AS 차액
FROM EMPLOYEE;

연습문제 6) 직급별(JOB) 사원의 최저 급여를(SALARY) 출력하세요
단, 관리자를(MANAGER) 알 수 없는 사원 및 최저 급여가 2000 미만인 그룹은 제외시키고,
급여에 대한 내림차순으로 정렬해서 출력하세요

 

HAVING   : 그룹함수 조건식

ORDER BY : 그룹함수로 정렬

SELECT JOB, MIN(SALARY)
FROM EMPLOYEE
WHERE MANAGER IS NOT NULL
GROUP BY JOB
HAVING MIN(SALARY) >= 2000
ORDER BY MIN(SALARY) DESC;

연습문제 7) 각 부서에 대해(부서번호별로)(DNO) 부서번호(DNO), 사원수(COUNT), 부서 내의 모든 사원의 평균 급여를(ROUND(AVG(),2)) 출력하세요 (부서별 사원수, 평균급여 출력)
컬럼별칭을 사용해서 부서번호, 사원수, 평균급여를 출력하세요.
평균급여는 소수점 3째자리에서 반올림하세요
SELECT DNO AS 부서번호, COUNT(*) AS 사원수, ROUND(AVG(SALARY),2) AS 평균급여
FROM EMPLOYEE
GROUP BY DNO;

연습문제 8) 사원테이블을(EMPLOYEE) 이용하여 부서번호(DNO), 평균급여(AVG_SAL), 최고급여(MAX_SAL), 최저급여(MIN_SAL), 사원수를(CNT) 출력하세요
단, 평균 급여를 출력할 때 소수점을 제외하고 각 부서번호별로 출력하세요
SELECT DNO AS 부서번호, 
TRUNC(AVG(SALARY)) AS 평균급여, 
MAX(SALARY) AS 최고급여, 
MIN(SALARY) AS 최저급여, 
COUNT(*) AS 사원수
FROM EMPLOYEE
GROUP BY DNO;

연습문제 9) 같은 직책에(JOB) 종사하는 사원이 3명 이상인 직책과 인원수를 출력하세요
문제해석) 직위별(JOB) 사원수를 구하고, 그 사원수가 3명이상인 사람만 출력하세요
SELECT JOB, COUNT(*)
FROM EMPLOYEE
GROUP BY JOB
HAVING COUNT(*) >= 3;

연습문제 10) 사원들의(EMPLOYEE) 입사 연도를(HIREDATE) 기준으로(입사연도별로)(1개)
부서별로(DNO)(2개) 몇 명이 입사했는지(COUNT) 출력하세요
SELECT DNO, HIREDATE, COUNT(DNO), COUNT(HIREDATE)
FROM EMPLOYEE
GROUP BY DNO, HIREDATE;			// 입사년도별로 분류해야함으로 땡!!

SELECT TO_CHAR(HIREDATE, 'YYYY'), DNO, COUNT(*)
FROM EMPLOYEE
GROUP BY TO_CHAR(HIREDATE, 'YYYY'), DNO;