<집계 함수 (그룹 함수)>
-
집계 함수 (Aggregate function): AVG(평균), COUNT(개수), MAX(최대값), MIN(최소값), SUM(합계)
SELECT [그룹열], 그룹 함수 (열 이름)
FROM 테이블명
WHERE 조건
GROUP BY 그룹명
HAVING 그룹 조건
ORDER BY 열이름
|
SELECT COUNT(*)
FROM employees;
|
cs |
|
SELECT COUNT(commission_pct)
FROM employees;
|
cs |
|
SELECT COUNT(NVL(commission_pct,0))
FROM employees;
|
cs |
|
SELECT MAX(salary), MIN(salary)
FROM employees;
|
cs |
|
SELECT COUNT(DISTINCT department_id)
FROM employees;
|
cs |
|
SELECT COUNT(employee_id)
FROM employees
WHERE department_id = 90;
|
cs |
|
SELECT MAX(first_name), MIN(first_name)
FROM employees;
|
cs |
|
SELECT MAX(hire_date), MIN(hire_date)
FROM employees;
|
cs |
|
SELECT SUM(salary), AVG(salary)
FROM employees;
|
cs |
|
SELECT AVG(commission_pct)
FROM employees;
|
cs |
|
SELECT department_id, ROUND(AVG(salary)) 평균급여
FROM employees
GROUP BY department_id;
|
cs |
-
employees 테이블에서 department_id별 salary의 평균을 평균급여 이름으로, salary의 합계를 총급여합계로, department_id를 부서번호로, 부서인원수 출력
|
SELECT department_id 부서번호,
ROUND(AVG(salary)) 평균급여,
SUM(salary) 총급여합계,
COUNT(*) 부서인원수
FROM employees
GROUP BY department_id;
|
cs |
-
employees 테이블에서 department_id별, job_id별 salary의 평균을 평균급여 이름으로, salary의 합계를 총급여합계로, department_id를 부서번호로, 부서인원수를 부서별 직업별 인원수로 출력
|
SELECT department_id 부서번호, job_id 직업번호,
ROUND(AVG(salary)) 평균급여,
SUM(salary) 총급여합계,
COUNT(*) "부서별 직업별 인원수"
FROM employees
GROUP BY department_id, job_id
ORDER BY 부서번호 ASC;
|
cs |
|
SELECT department_id 부서번호, SUM(salary) 급여합계
FROM employees
WHERE SUM(salary) > 100000 --그룹함수 사용 에러
GROUP BY department_id
ORDER BY department_id;
|
cs |
|
SELECT department_id 부서번호, SUM(salary) 급여합계
FROM employees
GROUP BY department_id
HAVING SUM(salary) > 100000
ORDER BY department_id;
|
cs |
<집계 함수 예제>
-
employees 테이블에서 부서별 사원수, 최대급여, 최소급여, 급여합계, 평균급여를 급여합계 큰순으로 출력
|
SELECT department_id, MAX(salary) 최대급여,
MIN(salary) 최소급여,
SUM(salary) 급여합계,
ROUND(AVG(salary)) 평균급여
FROM employees
GROUP BY department_id
ORDER BY 급여합계 DESC;
|
cs |
|
SELECT department_id 부서번호,
job_id 직업,
manager_id 상사번호,
SUM(salary) 월급합계,
COUNT(*) 직원수
FROM employees
GROUP BY department_id, job_id, manager_id
ORDER BY 부서번호;
|
cs |
|
SELECT ROUND(AVG(MAX(salary))) 부서별최고월급평균,
ROUND(AVG(MIN(salary))) 부서별최저월급평균
FROM employees
GROUP BY department_id;
|
cs |
|
SELECT job_id 직종, SUM(salary) 월급여합계
FROM employees
WHERE job_id NOT IN ('AC_MGR')
GROUP BY job_id
HAVING AVG(salary) > 10000
ORDER BY 월급여합계 DESC;
|
cs |
|
SELECT department_id 부서번호, ROUND(AVG(salary)) 평균급여
FROM employees
WHERE department_id NOT IN ('40')
GROUP BY department_id
HAVING AVG(salary) <= 7000;
|
cs |
|
SELECT job_id, SUM(salary) 급여총액
FROM employees
WHERE job_id NOT LIKE '%REP%'
GROUP BY job_id
HAVING SUM(salary) >= 13000
ORDER BY 급여총액 DESC;
|
cs |