ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
Designed by Tistory.