버글버글
DataBase 수업 기록(18) DQL그룹 본문
반응형
▶ 그룹(GROUP BY)
- GROUP BY절에서 지정한 칼럼의 데이터는 하나로 모아서 한 번만 조회가 됨
- SELECT절에서 조회할 칼럼은 "반드시" GROUP BY절에 존재해야 함
* HR계정(교육용 계정), EMPLOYEES 테이블 기반
1. 동일한 부서번호(DEPARTMENT_ID)로 그룹화하여 조회
SELECT DEPARTMENT_ID
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID;
결과값
DEPARTMENT_ID |
100 |
30 |
(null) |
90 |
20 |
70 |
110 |
50 |
80 |
40 |
60 |
10 |
그룹화 실패의 예시)
SELECT EMPLOYEE_ID
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID;
-- EMPLOYEE_ID를 조회하려면 GROUP BY절에 EMPLOYEE_ID가 있어야 함
2. 그룹화 함수 사용
- 집계함수(그룹함수)는 GROUP BY절에 해당 칼럼이 없어도 SELECT절에서 조회 가능함
예시)
SELECT
DEPARTMENT_ID
, SUM(SALARY) AS 부서별연봉합계
, FLOOR(AVG(SALARY)) AS 부서별연봉평균
, MAX(SALARY) AS 부서별최대연봉
, MIN(SALARY) AS 부서별최소연봉
, COUNT(*) AS 부서별사원수
FROM
EMPLOYEES
GROUP BY
DEPARTMENT_ID;
결과값
DEPARTMENT_ID | 부서별연봉합계 | 부서별연봉평균 | 부서별최대연봉 | 부서별최소연봉 | 부서별사원수 |
100 | 51608 | 8601 | 12008 | 6900 | 6 |
30 | 24900 | 4150 | 11000 | 2500 | 6 |
(null) | 7000 | 7000 | 7000 | 7000 | 1 |
3. 조건지정
1) GROUP BY로 처리할 행(ROW)은 적을수록 성능에 유리함
2) WHERE절 : GROUP BY 이전에 처리되므로 가능한 모든 조건은 WHERE절에서 처리함
3) HAVING절 : WHERE절로 처리할 수 없는 조건만 HAVING절로 처리함
예시) 부서번호가 100 미만인 부서들의 연봉평균을 조회하기(WHERE절, HAVING절 모두 가능한 조건)
- WHERE절 : 성능이 더 우수한 쿼리
SELECT
DEPARTMENT_ID
, FLOOR(AVG(SALARY)) AS 부서별연봉평균
FROM
EMPLOYEES
WHERE
DEPARTMENT_ID < 100
GROUP BY
DEPARTMENT_ID;
- HAVING절 : 가능하지만 성능이 떨어지는 쿼리
SELECT
DEPARTMENT_ID
, FLOOR(AVG(SALARY)) AS 부서별연봉평균
FROM
EMPLOYEES
GROUP BY
DEPARTMENT_ID
HAVING
DEPARTMENT_ID < 100;
결과값
DEPARTMENT_ID | 부서별연봉평균 |
30 | 4150 |
90 | 19333 |
20 | 9500 |
* WHERE 절과 HAVING절이 고민되면 고민하지말고 WHERE절에서 써라.
- 불필요한걸 미리 뺴고(WHERE)
예시 2) 소속된 사원수가 10명 이상인 부서의 연봉평균 조회하기(HAVING절만 가능)
- 소속된 사원수는 GROUP BY 이후에만 알 수 있기 때문에 WHERE절로 처리가 불가능
SELECT
DEPARTMENT_ID
, COUNT(*) AS 부서별사원수
, FLOOR(AVG(SALARY)) AS 부서별연봉평균
FROM
EMPLOYEES
GROUP BY
DEPARTMENT_ID
HAVING
COUNT(*) >= 10;
결과값
DEPARTMENT_ID | 부서별사원수 | 부서별연봉평균 |
50 | 45 | 3475 |
80 | 34 | 8955 |
반응형
'Database > database 수업 기록' 카테고리의 다른 글
DataBase 수업 기록(19) JOIN (0) | 2022.09.15 |
---|---|
DataBase 수업 기록(18.5) DQL 연습 (0) | 2022.09.14 |
DataBase 수업 기록(17) 함수 - 기타 (0) | 2022.09.12 |
DataBase 수업 기록(16) 함수 - 문자 (0) | 2022.09.11 |
DataBase 수업 기록(15) 함수 - 날짜 (0) | 2022.09.10 |