-
[About_MySQL _ group by 와 having]About_Datascience/SQL 2023. 2. 1. 17:59
GROUP BY 는 데이터를 그룹으로 나누어, 그룹별로 어떠한 정보를 출력하고 비교할 때 사용되며
여러 결합함수(SUM , COUNT , MIN , MAX ...)와 함께 사용된다.
GROUP BY
<world data>
# 대륙별 총 인구수 출력 SELECT continent , SUM(population) total_population FROM country GROUP BY continent ORDER BY total_population DESC;
# 국가 코드별 도시 개수 출력 SELECT countrycode, COUNT(countrycode) AS city_count FROM city GROUP BY countrycode # 내림차순 정렬 ORDER BY city_count DESC;
<sakila data>
# 년월별 총 매출데이터 출력 SELECT (DATE_FORMAT(payment_date, '%Y-%m')) AS monthly , SUM(amount) FROM payment GROUP BY monthly;
HAVING
WHERE 절과 같은 기능을 하지만 WHERE는 그룹화 하기 전에 조건을 걸어버리고,
HAVING은 그룹화 후에 조건을 건다.
<world data>
# 대륙별 총 인구수 중 인구수가 5억 이상인 대륙 출력 SELECT continent , sum(population) AS population FROM country WHERE population >= 50000*10000 #group by 하기 전에 필터링이 된 거임. GROUP BY continent;
위의 코드대로 실행을 해보면
WHERE 절 사용 결과 엥 ? 대륙이 아시아 밖에 없는 것도 아니고(?) 이런 잘못된 결과가 나온다. 이는 WHERE 절이 그룹화 되기 전에 조건을 걸어버렸기 때문에 저러한 결과가 나온 것이다. 따라서 GROUP BY 를 사용할 때는 HAVING으로 조건을 걸어줘야 한다.
# HAVING 사용 SELECT continent , sum(population) AS population FROM country GROUP BY continent HAVING population >= 50000*10000;
HAVING 사용 결과 HAVING 을 사용한 결과 결과가 올바르게 나온 것을 알 수 있다.
절대 헷갈리지 말 것.
'About_Datascience > SQL' 카테고리의 다른 글
[About _ MySQL _ Sub Query] (0) 2023.02.02 [About _ MySQL _ join] (0) 2023.02.01 [About_MySQL _ 함수 , 조건절] (0) 2023.01.31 [About_MySQL 기본문법(2)_DML의 CRUD] (0) 2023.01.31 [About_MySQL 기본문법(1)_DDL의 CRUD] (0) 2023.01.30