본문 바로가기

Database/MySQL

[MySQL] Group By ~ Having 사용하기

[해당 포스트는 개인적으로 공부를 하고 차후에 참고용으로 하고자 작성한 것입니다.
따라서 잘못된 부분이나 부족한 부분이 있을 수 있기에 참고하시기 바랍니다.]

 

Table 내에 데이터를 집계 내어 출력하고자 하는 일이 있을 때 사용 문법이 Group By다.

Group By는 Where 절 다음에 사용할 수 있으며, 특정 Column을 기준으로 그룹으로 만든다.

 

SELECT 컬럼 FROM 테이블
WHERE condition
GROUP BY 컬럼
HAVING condition;

 

Column을 Group으로 잡으면 해당의 UNIQUE한 값에 따라서 데이터를 Group로 만들고, 중복된 열은 제거가 된다.

 

다음의 쿼리를 입력하여 예제를 실습해보자.

 

create database ldhTest;

use ldhTest;

CREATE TABLE client
(
	id INT NOT NULL primary key auto_increment,
	name VARCHAR(40) NOT NULL,
	age INT NOT NULL,
	type VARCHAR(20) NOT NULL
);

INSERT INTO client (name, age, type) VALUES ('DHL', 27, 'A');
INSERT INTO client (name, age, type) VALUES ('EHL', 29, 'B');
INSERT INTO client (name, age, type) VALUES ('FHL', 27, 'A');
INSERT INTO client (name, age, type) VALUES ('GHL', 30, 'C');
INSERT INTO client (name, age, type) VALUES ('HHL', 24, 'F');
INSERT INTO client (name, age, type) VALUES ('IHL', 20, 'B');
INSERT INTO client (name, age, type) VALUES ('JHL', 26, 'A');
INSERT INTO client (name, age, type) VALUES ('KHL', 24, 'E');
INSERT INTO client (name, age, type) VALUES ('LHL', 23, 'E');
INSERT INTO client (name, age, type) VALUES ('MHL', 21, 'C');

 

다음과 같이 Client Table이 존재할 때 Type 별로 Group을 지어보자.

 

 

select type, COUNT(*) from client group by type;

 

Group By와 같이 올 수 있는게 HAVING 뿐만 아니라 COUNT도 주로 쓰인다.

집계를 내어 개수를 출력할 때 COUNT를 사용한다. COUNT도 원하는 Column을 선택해서 개수를 셀 수 있다.

 

 

이번엔 HAVING을 추가하여 Group의 조건을 추가해보자.

HAVING은 Group절의 Where절로 생각하면 된다. Group 된 곳에 조건을 주어 보고자 하는 것만 가져올 수 있다.

 

아래의 예제는 Count한 개수가 3개 이상인 Type을 출력하는 예제이다.

 

select type, COUNT(*) from client group by type having count(*) >= 3;