데이터 처리 도구/SQL

[MySQL] 집계 함수와 GROUP BY절, HAVING절

yourhm 2022. 5. 5. 21:40

그룹별로 데이터 꺼내오기

1. GROUP BY

SELECT sports
     , AVG(height)
FROM olympic
GROUP BY sports

GROUP BY "그룹핑할 기준 컬럼명"

GROUP BY는 주로 집계 함수와 함께 사용된다.

• 그룹핑할 기준 컬럼명을 SELECT 바로 뒤에 써주면 보기 편하다. 만약 안써주었더라도 집계함수가 뒤에 써주었다면 실행되는데, 이때는 집계함수의 결과 값만 추출된다. 반대로 SELECT에 기준 컬럼명만 써주고 집계함수를 안써주면 기준 컬럼명만 출력된다.

그룹핑할 기준 컬럼이 두개 이상이면 콤마로 나열해주면 된다.

ORDER BY의 위치는 GROUP BY 다음에 온다.

 

 

2.  GROUP BY + HAVING

SELECT sports
     , AVG(height) AS avg_height
FROM olympic
WHERE season = 'summer'
GROUP BY sports
HAVING avg_height >= 170

GROUP BY를 사용해서 그룹별 집계를 한뒤, 조건을 걸어야할 때는 HAVING을 함께 사용한다. (WHERE 사용 X)

사용 가능한 순서: WHERE → GROUP BY + HAVING

 

 

 

자주 쓰는 집계 함수

집계함수 설명
COUNT( ) 몇개인지 세어서 숫자를 반환하기 (단, null값은 제외하고 센다)
SUM( ) 합계 반환하기
AVG( ) 평균값 반환하기
MIN( ) 최소값 반환하기
MAX( ) 최대값 반환하기
GROUP_CONCAT( ) 그룹별로 null이 아닌 값들을 연결하여 하나의 문자열로 반환하기

 

GROUP_CONCAT

SELECT class_num
     , COUNT(DISTINCT stuff) AS cnt
     , GROUP_CONCAT(DISTINCT stuff ORDER BY stuff) AS list_stuff
FROM Classroom
GROUP BY class_num
ORDER BY class_num

 그룹별로 null이 아닌 값들을 연결하여 하나의 문자열로 반환하기.

 함수 안에 쓸 수 있는 절은 다음과 같다.

     - DISTINCT

     - ORDER BY

     - SEPARATOR (default는 콤마)

 

 

 

[참고자료]

MySQL Documentation (Aggregate Function Descriptions)

https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html