-
SQL - ORDER BY, GROUP BY, HAVINGDataBase/Oracle 2022. 1. 19. 20:04728x90반응형
SQL - ORDER BY, GROUP BY, HAVING
쿼리 실행 순서
FROM -> CONNECT BY -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
FROM절에서 만든 별칭은 모든 곳에서 쓸 수 있다.
SELECT 절에서 만든 별칭은 HAVING과 그 이전 절에서 쓸 수 없다.ORDER BY 절
- SELECT한 컬럼에 대해 정렬을 할 때 작성하는 구문
- SELECT 구문의 가장 마지막에 실행
GROUP BY 절
- 집계 함수를 이용하기 위해서는 집계함수가 적용될 그룹의 기준을
GROUP BY절에 기술하여 사용해야 한다
실습 예제 - GROUP BY
-- DEPT_CODE 기준으로 그루핑 SELECT COUNT(*) , DEPT_CODE FROM EMPLOYEE GROUP BY DEPT_CODE; -- DEPT_CODE, JOB_CODE 기준으로 그루핑 SELECT DEPT_CODE , JOB_CODE , SUM(SALARY) , COUNT(*) FROM EMPLOYEE GROUP BY DEPT_CODE , JOB_CODE ORDER BY 1;
-- 직원 테이블에서 부서 코드별 그룹을 지정하여 -- 부서코드, 그룹별 급여의 합계, 그룹별 급여의 평균(정수처리), 인원수 -- 조회하고 부서코드 순으로 오름차순 정렬하세요 SELECT DEPT_CODE , SUM(SALARY) 합계 , FLOOR(AVG(SALARY)) 평균 , COUNT(*) 인원수 FROM EMPLOYEE GROUP BY DEPT_CODE ORDER BY DEPT_CODE; -- 직원 테이블에서 직급코드, 보너스를 받는 사원 수를 조회하여 -- 직급코드 순으로 오름차순 정렬하세요. SELECT JOB_CODE , COUNT(BONUS) FROM EMPLOYEE GROUP BY JOB_CODE ORDER BY JOB_CODE; -- 직원 테이블에서 직급코드, 보너스를 받는 사원 수를 조회하여 -- 직급코드 순으로 오름차순 정렬하세요. -- 단, 보너스를 받는 사람이 없는 직급코드의 경우 RESULT SET에서 제외한다. SELECT JOB_CODE , COUNT(*) FROM EMPLOYEE WHERE BONUS IS NOT NULL GROUP BY JOB_CODE ORDER BY JOB_CODE; -- 직원 테이블에서 주민번호의 8번째 자리를 조회하여 -- 1이면 남, 2이면 여로 결과 조회하고 -- 성별별 급여 평균(정수처리), 급여 합계, 인원수를 조회한 뒤 -- 인원수로 내림차순 정렬하세요. SELECT DECODE(SUBSTR(EMP_NO, 8, 1), 1, '남', 2, '여') AS 성별 , FLOOR(AVG(SALARY)) 평균 , SUM(SALARY) 합계 , COUNT(*) 인원수 FROM EMPLOYEE -- GROUP BY 성별 (GROUP BY절에서는 SELECT절의 별칭 사용 불가) GROUP BY DECODE(SUBSTR(EMP_NO, 8, 1), 1, '남', 2, '여') ORDER BY 인원수 DESC;
실습 예제 - HAVING
둘의 차이 잘 이해할 것
-- 300만원 이상의 월급을 받는 사원들을 대상으로 -- 부서별 그룹 월급 평균 계산 SELECT DEPT_CODE , FLOOR(AVG(SALARY)) 평균 FROM EMPLOYEE WHERE SALARY > 3000000 GROUP BY DEPT_CODE ORDER BY 1; -- 모든 직원을 대상으로 부서별 월급 평균을 구한 뒤 -- 평균이 300만원 이상인 부서 조회 SELECT DEPT_CODE , FLOOR(AVG(SALARY)) 평균 FROM EMPLOYEE GROUP BY DEPT_CODE HAVING FLOOR(AVG(SALARY)) > 3000000 ORDER BY 1;
-- 급여 합계가 가장 많은 부서의 부서코드와 급여 합계를 구하세요 SELECT DEPT_CODE , SUM(SALARY) FROM EMPLOYEE GROUP BY DEPT_CODE HAVING SUM(SALARY) = (SELECT MAX(SUM(SALARY)) FROM EMPLOYEE GROUP BY DEPT_CODE );
728x90반응형'DataBase > Oracle' 카테고리의 다른 글
SQL - SET OPERATION (0) 2022.01.20 SQL - ROLLUP, CUBE, GROUPING, GROUPING SETS (0) 2022.01.20 SQL - 집계 함수 (0) 2022.01.19 SQL - NULL 관련 함수, 선택 함수 (0) 2022.01.19 SQL - 형식 변환 함수와 포맷 문자 (0) 2022.01.19