Database/MySQL

[MySQL] 데이터 그룹화 - GROUP BY / HAVING

루루23 2024. 10. 10. 16:47
반응형

~ 예제는 여전히 히어로 목록입니다 ~

 

[MySQL] 데이터 생성, 읽기, 수정, 삭제 - INSERT / SELECT / UPDATE / DELETE

먼저 사용할 테이블은 이러합니다.CREATE TABLE myhero ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(20), class INT NOT NULL, intelligence INT, strength INT, speed INT, durability INT, power INT, tier CHAR(5), PRIMARY KEY(id)); 데이

newj23.tistory.com

 

GROUP BY

Syntax

SELECT column_name, ... ,agg_functions FROM table_name WHERE condition GROUP BY column_name;

 

사용 예제

SELECT tier, COUNT(*) FROM table_name GROUP BY tier;

 

그룹 함수 (집계 함수)

: COUNT, SUM, AVG, MIN, MAX

SELECT tier, COUNT(1), AVG(class), MAX(class), MIN(class)
FROM myhero GROUP BY tier ORDER BY AVG(class) DESC;
# COUNT(*) : 하나의 행을 하나로
# COUNT(1) : 하나의 값을 하나로 - 값이 null일 경우 위와 다른 결과 나올 수 있음

 

 

HAVING

- 가져올 데이터 그룹에 조건을 지정

- WHERE 과 비슷하지만 조건식에 그룹 함수를 활용

 

Syntax

SELECT column_name, ... , agg_functions FROM table_name
WHERE condition GROUP BY column_name HAVING condition

 

사용 예제

SELECT tier, COUNT(1), AVG(class), MAX(class), MIN(class)
FROM myhero GROUP BY tier HAVING AVG(class) >= 500;

 

쿼리 순서

# 쿼리 작성 시
SELECT ~ FROM ~ WHERE ~ GROUP BY ~ HAVING ~ ORDER BY
# 쿼리 실행 시
FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY
반응형