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
댓글