반응형

GROUP BY

그룹을 묶어줄 기준을 제시하는 구문으로 그룹 함수와 함께 사용한다

여러개의 값들을 하나의 그룹으로 묶어서 처리 시 사용한다

   ※ GROUP함수는 WHERE절에서 조건 사용 불가함 ⇒ HAVING절에서 처리

GROUP BY 그룹할컬럼
--각 부서별 사원수
SELECT DEPT_CODE 부서명, COUNT(*)||'명' 인원
FROM EMPLOYEE
GROUP BY DEPT_CODE;

--각 직급별 직급코드, 총급여의 합, 사원수, 보너스를 받는 사원수, 평균급여, 최고급여, 최소급여
SELECT JOB_CODE
       ,SUM(SALARY) "총 급여 합"
       ,COUNT(*) "직원수"
       ,COUNT(BONUS) "보너스 받는 직원수"
       ,ROUND(AVG(SALARY)) "평균 급여"
       ,MAX(SALARY) "최고 급여"
       ,MIN(SALARY) "최소 급여"
FROM EMPLOYEE
GROUP BY JOB_CODE
ORDER BY JOB_CODE; --오름차순

--성별별 사원수
SELECT DECODE(SUBSTR(EMP_NO,8,1),'1','남자','2','여자') "성별"
        ,COUNT(*) "사원수"
FROM EMPLOYEE
GROUP BY SUBSTR(EMP_NO,8,1);

 

HAVING

그룹에 대한 조건 제시 시 사용되는 구문이며 GROUP BY 절 다음에 작성한다

HAVING 조건식;
--각 부서별 평균 급여가 300만원 이상인 부서들만 조회
SELECT DEPT_CODE, FLOOR(AVG(SALARY)) "평균급여"
FROM EMPLOYEE
GROUP BY DEPT_CODE
HAVING AVG(SALARY)>=3000000;

--각 부서별 보너스를 받는 사원이 없는 부서만 조회
SELECT DEPT_CODE
FROM EMPLOYEE
GROUP BY DEPT_CODE
HAVING COUNT(BONUS)=0;

반응형

+ Recent posts