DB/Oracle
[Oracle DB] 그룹 함수
로아다
2023. 4. 21. 05:43
728x90
반응형
그룹 함수
- 하나의 컬럼값을 그룹 기준으로 삼아 여러 행들을 하나로 합쳐 조회하는 것
- 그룹의 기준이 되는 컬럼을 GROUP BY절을 통해 선택할 수 있다.
- 그룹 함수를 사용하면 일반 컬럼은 함께 출력할 수 없다.
- 그룹 대상이 되는 컬럼과 그룹 함수의 결과만 출력 가능하다.
SUM(column) : 해당 컬럼의 총합을 구해주는 그룹 함수
SELECT SUM(salary) FROM employees;
-- 부서 번호별 월급의 총합
SELECT department_id, SUM(salary) FROM employees GROUP BY department_id;
-- 직책별 월급의 총합
SELECT job_id, SUM(salary) FROM employees GROUP BY job_id;
-- 같은 이름을 가진 사람들의 총합
SELECT first_name, SUM(salary) FROM employees GROUP BY first_name;
AVG(column) : 해당 컬럼의 평균값을 구하는 그룹 함수
SELECT
DECODE(job_id,
'IT_PROG', '프로그래머',
job_id) AS job_id,
SUM(salary),
AVG(salary)
FROM
employees
GROUP BY
job_id;
COUNT(column) : 해당 컬럼의 행의 개수를 구하는 그룹 함수 (null을 제외)
SELECT COUNT(*) FROM employees;
SELECT COUNT(commission_pct) FROM employees;
SELECT COUNT(department_id) FROM employees;
SELECT COUNT(manager_id) FROM employees;
MAX(column) : 해당 컬럼의 최대값을 구하는 그룹 함수
SELECT department_id, MAX(hire_date) FROM employees GROUP BY department_id;
MIN(coulmn) : 해당 컬럼의 최소값을 구하는 그룹 함수
SELECT department_id, MIN(hire_date) FROM employees GROUP BY department_id;
HAVING
- 그룹 함수의 결과에 대해 조건을 적용하고 싶은 경우
- WHERE절은 그룹화 전의 행들로 조건을 만들 수 있고
HAVING절은 그룹 함수 적용 후의 값들로 조건을 만들 수 있다.
-- ex: 직책별 평균 월급이 10000달러 이상인 직책에 속한 사원들의 수
SELECT job_id, COUNT(salary) FROM employees
GROUP BY job_id HAVING AVG(salary) >= 10000;
-- ex: 각 부서에 개인 월급이 8000달러 이상인 사원들이 3명 이상인 부서만 출력
SELECT department_id, COUNT(*) FROM employees
WHERE salary >= 8000
GROUP BY department_id
HAVING COUNT(*) >= 3;
728x90
반응형