진짜 개발자
본문 바로가기

Database/Mysql

Mysql - 집계함수와(sum, count) Group query 사용법 (GROUP BY, HAVING)

728x90
mysql group by를 쓰는 곳과 사용법

이번 시간에는 Group query라고 불리우는 SQL의 Group by, Having절에 대해서 알아보겠습니다.

 

오늘 도움을 줄 citykorea라는 테이블입니다. (위의 테이블은 mysql 홈페이지에서 제공하는 연습용 Database인 world에 속해있는 테이블입니다.)

 

 

 

 

1. 집계함수

우선 오늘 다룰 Group By, Having을 이해하기 위해서는 집계함수에 대한 이해가 선행적으로 필요합니다. Group by 와 Having집계함수의 결과값을 다루는 쿼리이기 때문입니다.

 

1.1 의미

집계함수는 말그대로 어떤 데이터를 집계하는 함수들을 의미합니다. 예를 들어 어떤 팀에 속한 사원의 수, 어떤 팀의 연봉합계, 어떤 팀의 나이의 평균 등 집계성 정보를 반환하는 함수들을 의미합니다.

 

 

1.2 종류

COUNT


위의 쿼리는 집계함수 count를 이용해 citykorea의 모든 레코드의 수를 출력하는 쿼리입니다.

 

 

SUM


위의 쿼리는 집계함수 sum을 이용해 citykorea의 인구수 합계를 출력하는 쿼리입니다.

 

 

MAX&MIN


위의 쿼리는 집계함수 max를 이용해 citykorea의 가장 많은 인구수를 가진 도시의 이름과, 인구수를 출력한 쿼리입니다.

 

 

AVG


위 쿼리는 집계함수 avg를 이용해, citykorea의 평균 인구수를 출력하는 쿼리입니다.

 

 

 

 

 

2. Group query (Group by, Having)

드디어 Group By와 Having절을 배워볼 시간입니다.

 

 

2.1 Group By

Group By는 집계함수의 결과를 특정 컬럼을 기준으로 묶어 결과를 출력해주는 쿼리입니다.

 

형식


형식은 위와 같습니다. SELECT절에 Group으로 묶을 column과, 집계함수를 사용합니다. (FROM, WHERE의 설명은 생략하겠습니다.) 마지막으로 GROUP BY에 Group의 기준컬럼을 입력합니다.

 

 

예제


> citykorea 테이블의 도시별 인구 합계를 출력하시오.

위처럼 SELECT절에 GROUP BY의 그룹핑 대상이 되는 COLUMN을 같이 출력해주는 것이 원하는 데이터를 얻는데에 도움이 됩니다.

 

 

 

 

2.2 Having

HavingGROUP BY쿼리의 결과를 다시 필터링하기 위한 쿼리입니다. 마치 SELECT의 결과에 조건을 걸때 WHERE를 사용하듯이 말입니다.

 

형식


앞서 사용했던 GROUP BY에 추가적으로, HAVING을 사용하면 됩니다. 조건 비교에 사용될 데이터는 당연히 집계함수의 결과를 사용해야합니다. 바로 예를들어 설명드리겠습니다.

 

 

예시


> citykorea 테이블의 도시별 인구수 평균이 500,000만을 초과하는 도시별 인구수 평균을 출력하시오.

위와 같이 HAVING절에 조건을 부여할때에는 GROUP BY 처럼 집계함수를 사용해야합니다. 그렇다고 꼭 SELECT에 사용된 집계함수를 사용할 필요는 없습니다.

 

 

> citykorea 테이블에서 도시별 인구수 합계가 1,000,000명을 초과하는 도시들의 인구수 평균을 출력하시오.