본문 바로가기
DBMS/ORACLE

[ORACLE]오라클_SELECT문 그룹화(GROUP BY / HAVING)

by 썸머워즈 2019. 2. 8.
반응형

GROUP BY

- 데이터들을 원하는 그룹으로 나누는 역할

- 어떤 기준으로 그룹할 경우 다른 값들을 가져올때 역시 그룹핑하여 가져와야한다.

- 집계함수 SUM, MIN, MAX, AVG, COUNT 등이 함께 사용된다. (https://mine-it-record.tistory.com/36)

- 그룹을 하고자 하는 컬러명을 SELECT절과 GROUP BY절에 둘다 명시해 주어야 하나 여기서 집계함수의 경우에는 GROUP BY절에 명시할 필요는 없다.

- GROUP BY절의 위치는 WHERE 와 ORDER BY절 사이에 위치한다.

 

▷ 구문

SELECT [컬럼1],[컬럼2],[컬럼3]... FROM [테이블 이름] GROUP BY [그룹핑 할 컬럼]

예제 1) GROUP BY 기본 사용법

SELECT depart_no , SUM(salary)
FROM emp GROUP BY depart_no ORDER BY depart_no;

GROUP BY절은 명시된 컬럼을 그룹화 시켜주지만 나머지는 그룹화를 시켜주지 않기 때문에 집계함수를 사용하거나 그룹핑 대상으로 컬럼을 SELECT절과 GROUP BY절에 명시해 주어야 한다.

 

다음으로는 GROUP BY절과 함께 쓰이는 HAVING절에 대해 알아보자.


HAVING

GROUP BY 사용시에 명시해주는 조건 값

- WHERE 절에서는 집계함수를 사용할 수 없으나 HAVING절에서는 집계함수를 가지고 조건비교를 할 수 있다.

- 필수는 아니고 선택적으로 사용한다.

 

▷ 구문

GROUP BY [그룹핑할 컬럼] HAVING [조건]

예제 1) HAVING 기본 사용법

SELECT depart_no, SUM(salary), SUM(commission)
FROM emp GROUP BY depart_no HAVING SUM(commission) >= 2000 ORDER BY SUM(commission)

예제 2) HAVING과 WHERE 동시 사용

SELECT depart_no, SUM(salary), SUM(commission), job
FROM emp WHERE job != 'sales'
GROUP BY depart_no HAVING SUM(commission) >= 2000 ORDER BY sum(commission) DESC;

 

예제 2번에 대해 설명하자면

WHERE절은 쿼리 전체에 대한 필터 역할을 하는거고,

HAVING절은 WHERE 조건으로 한번 걸러진 결과에 대해 GROUP BY를 실행한 후 산출된 겨로가에 대해 다시 조건을 걸어 데이터를 걸러내는 작업을 하는 것이다.


추가적으로 알아두면 좋을 DISTINCT에 대해 한번 알아보자.

https://mine-it-record.tistory.com/32

 

[ORACLE] SELECT문 중복제거(ft. DISTINCT)

SELECT 할 때 중복을 제거하는 경우에 많이 사용되는 DISTINCT에 대해 알아보자. SELECT를 해서 데이터를 가져올 때 중복되는 데이터 없이 가져오고 싶을 때 사용된다. 구문은 참 간단하다. ▷ 구문 SELE

mine-it-record.tistory.com

 

https://mine-it-record.tistory.com/38

 

[ORACLE]오라클_DISTINCT와 GROUP BY의 차이

오라클의 DISTINCT 와 GROUP BY 의 차이에 대해 알아보도록 하자. 두개가 각 사용되는 시점에 대해 얘기하자면 DISTINCT는 유니크한(중복을 제거)한 데이터를 조회하는 경우에 사용되며, GROUP BY는 지정

mine-it-record.tistory.com

반응형


댓글

TOP