데이터 처리 도구/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