콩부방
[Oracle]GROUP BY,HAVING 본문
GROUP BY,HAVING
GROUP BY는 컴럼들의 값을 그룹으로 만들어(중복제거) 그 그룹들의 집계를 낼때 사용한다.
컬럼에 어떠한 데이터들이 있는지 확인만 하려고 한다면 DISTINCT를 이용하여 중복제거를 해주는게 좋다.
(중복 값이 많을때는 DISTINCT에 비해 GROUP BY가 성능이 떨어질 수 있음)
HAVING은 GROUP BY한 그룹들에 조건을 적용할 때 사용한다.
WHERE 과 HAVING 차이점
WHERE : 기본적으로 모든 행에 대해서 조건을 적용
HAVING : GROUP BY절과 같이 사용하여야 되고 그룹화된 결과들에 조건을 적용
샘플 데이터 베이스는 오라클 HR계정
GROUP BY 사용연습

조건을 주지않고 GROUP BY를 썼을때 그룹으로 묶어주기(중복제거) 때문에 DISTINCT 결과와 같다.


위사진 처럼 HAVING은 그룹화된 그룹들에 대해서 조건을 적용한다

오류발생 할 수 있는 예

예)위의 예제에서 FIRST NAME도 같이 확인하고 싶을때
오류 원인1 :GROUP BY에 사용되지 않은 컬럼을 조건으로 사용하면 오류가 발생한다.

GROUP BY에 넣어 줬을때 위의 결과에 FIRST NAME 컬럼 SELECT 안되는 이유 : JOB_ID가 외래키라서 FIRST NAME 을 COUNT대로 출력하면 JOB_ID 중복값이 결과창에 발생하기 떄문에 JOB_ID만 가지고선 누구의 FIRST NAME 인지 따로 SELECT 할수없다.

그렇기때문에 GROUP BY에 FIRST NAME을 넣어주면 결과창에 이렇게 출력된다.
확인사항
쿼리 실행순서 FROM-> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
확인 사항 : 순서에서 보면 알 수 있듯이 WHERE절이 먼저 실행되므로
그룹화 되기전에 모든행에 조건이 적용된다.
모든 행에 대해서 조건을 적용할땐 WHERE 그룹에 대해서 조건을 적용할 땐 HAVING
헷갈리지 않도록 주의 하자.
'DataBase > Oracle' 카테고리의 다른 글
[Oracle]JOIN, ANSI JOIN (0) | 2021.08.16 |
---|---|
[Oracle]DROP (0) | 2021.08.13 |
[Oracle]ALTER (0) | 2021.08.13 |
[Oracle]CREATE (0) | 2021.08.13 |
[Oracle]DELETE (0) | 2021.08.11 |