-- 기본 구문
SELECT column_name, aggregate_function(column_name)
FROM table_name
GROUP BY column_name;
-- 예: 부서별 직원 수
SELECT deptno, COUNT(*) AS 직원_수
FROM emp
GROUP BY deptno;
-- 기본 구문
SELECT column1, column2, aggregate_function(column_name)
FROM table_name
GROUP BY column1, column2;
-- 예: 부서 및 직책별 직원 수
SELECT deptno, job, COUNT(*) AS 직원_수
FROM emp
GROUP BY deptno, job;
-- 직책별 평균 급여
SELECT job, TRUNCATE(AVG(sal), 1) AS 평균_급여
FROM emp
GROUP BY job;
-- 부서별 최고 급여
SELECT deptno, MAX(sal) AS 최고급여
FROM emp
GROUP BY deptno;
-- 부서, 직책별 급여 합계
SELECT deptno, job, SUM(sal) AS 급여합계
FROM emp
GROUP BY deptno, job;
-- 정렬 추가
SELECT deptno, job, SUM(sal) AS 급여합계
FROM emp
GROUP BY deptno, job
ORDER BY SUM(sal) DESC;
-- 직원수가 3명 이상인 부서
SELECT deptno, COUNT(*) AS 직원_수
FROM emp
GROUP BY deptno
HAVING COUNT(*) >= 3;
-- 급여 합계가 2000 이상인 부서/직책 그룹
SELECT deptno, job, SUM(sal) AS 급여합계
FROM emp
GROUP BY deptno, job
HAVING SUM(sal) >= 2000;
-- 부서별 최고 급여를 받는 사원 조회
SELECT deptno, ename, sal
FROM emp
WHERE (deptno, sal) IN (
SELECT deptno, MAX(sal)
FROM emp
GROUP BY deptno
);
-- 부서별 평균 급여가 2000 이상이고 직원수가 3명 이상인 부서
SELECT
deptno,
COUNT(*) AS 직원수,
AVG(sal) AS 평균급여
FROM emp
GROUP BY deptno
HAVING AVG(sal) >= 2000 AND COUNT(*) >= 3;
WHERE vs HAVING
정렬 순서
SELECT ... FROM ...
WHERE ...
GROUP BY ...
HAVING ...
ORDER BY ...
집계 함수 사용
NULL 처리
성능 고려사항