-- GROUP BY 절과 HAVING 절
-- 지금까지 알아본 집계 함수의 예제는 모두 사원 전체를 기준으로 데이터를 추출했는데,
-- 전체가 아닌 특정 그룹으로 묶어 데이터를 집계할 수도 있다.
-- 이때 사용되는 구문이 바로 GROUP BY 절이다. 그룹으로 묶을 컬럼명이나 표현식을 GROUP BY 절에 명시해서 사용하며
-- GROUP BY 구문은 WHERE와 ORDER BY절 사이에 위치한다.
-- 사원 테이블에서 각 부서별 급영의 총액을 구했다
SELECT DEPARTMENT_ID, SALARY
FROM EMPLOYEES
ORDER BY DEPARTMENT_ID ASC; --부서ID 오름차순 정렬
SELECT DEPARTMENT_ID, SUM(SALARY)
FROM EMPLOYEES -- 전체 데이터 대상작업
GROUP BY DEPARTMENT_ID -- DEPARTMENT_ID 컬럼의 동일한 데이터를 묶는다(그룹화)
ORDER BY DEPARTMENT_ID ASC;
-- not a GROUP BY expression 에러발생. EMPLOYEE_ID 컬럼 사용불가
SELECT EMPLOYEE_ID, DEPARTMENT_ID, SUM(SALARY)
FROM EMPLOYEES -- 전체 데이터 대상작업
GROUP BY DEPARTMENT_ID -- DEPARTMENT_ID 컬럼의 동일한 데이터를 묶는다(그룹화)
ORDER BY DEPARTMENT_ID ASC;
-- 질문시, 그룹화 대상의 컬럼이 무엇인지 판단
-- 사원 테이블에서 각 부서별 인원수를 구하라
SELECT DEPARTMENT_ID, COUNT(EMPLOYEE_ID)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID -- DEPARTMENT_ID 컬럼의 동일한 데이터를 묶는다(그룹화)
ORDER BY DEPARTMENT_ID ASC;
-- 사원 테이블에서 각 부서별 평균금액을 구하라
SELECT DEPARTMENT_ID, COUNT(SALARY), AVG(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID -- DEPARTMENT_ID 컬럼의 동일한 데이터를 묶는다(그룹화)
ORDER BY DEPARTMENT_ID ASC;
-- 종합으로 집계 함수를 모두 사용하자
-- 각 부서별, 급여합계, 급여평균, 사원수, 부서별 가장 높은 연봉, 부서별 가장 낮은 연봉
SELECT DEPARTMENT_ID, SUM(SALARY), AVG(SALARY), COUNT(SALARY), MAX(SALARY), MIN(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID -- DEPARTMENT_ID 컬럼의 동일한 데이터를 묶는다(그룹화)
ORDER BY DEPARTMENT_ID ASC;
댓글남기기