본문 바로가기
CS/DB

그룹화 - GROUP BY

by 넬준 2021. 12. 3.

GROUP BY 구에 열을 지정하여 그룹화하면 

지정된 열의 값이 같은 행끼리 하나의 그룹으로 묶인다.

 

마치 DISTINCT와 같이 중복을 제거하는 효과가 있다.

 

SELECT name, COUNT(name), SUM(quantity) FROM table GROUP BY name;

 

name열 값을 기준으로 그룹화가 된다,.

 

 

HAVING

WHERE 구 조건식으로 행을 검색하는 처리가 GROUP BY로 그룹화하는 처리보다 먼저 일어난다.

따라서 WHERE 구에서, 그룹화가 필요한 집계함수를 사용할 수 없다.

 

집계 함수 결과값에 의해 조건식을 작성하기 위해 HAVING 구를 쓴다!

GROUP BY 뒤에 작성하여 WHERE 구와 똑같이 조건식을 쓸 수 있다.

 

WHERE로 행 검색 -> 검색 후 GROUP BY로 그룹화 -> HAVING으로 조건 검색

 

SELECT name COUNT(name) FROM table WHERE COUNT(name) = 1 GROUP BY name;

 

WHERE 구에서는 집계함수를 사용해 조건식을 작성할 수 없다!

 

SELECT name, COUNT(name) FROM table GROUP BY name HAVING COUNT(name) = 1;

 

GROUP BY 뒤 HAVING 구에 집계함수 값을 이용해 조건식을 작성하면 된다.

 

내부 처리 순서

WHERE → GROUP BY → HAVING → SELECT → ORDER BY


GROUP BY에서 지정한 열 이외의 열은 집계함수를 사용하지 않은 채 SELECT 구에 지정할 수 없다.

 

SELECT no, name, quantity FROM table GROUP BY name;

 

name열로 그룹화했기 때문에 no, quantity열은 SELECT 구에 지정할 수 없다.

같은 name열 값에 다른 no, quantity열 값인 경우 어떤 것을 반환할지 모르기 때문이다.

 

SELECT name, quantity FROM table GROUP BY name. quantity;

 

위와 같이 여러 열로 그룹화를 하면 해당 열을 SELECT 구에 지정할 수 있다.

'CS > DB' 카테고리의 다른 글

IN / EXISTS / 상관 서브쿼리  (0) 2021.12.04
서브쿼리  (0) 2021.12.03
집계함수 - COUNT / SUM / AVG / MIN / MAX  (0) 2021.12.03
데이터 추가, 갱신, 삭제 - INSERT / UPDATE / DELETE  (0) 2021.12.03
CASE문  (0) 2021.12.03

댓글