IT/sql

[SQL 그룹화/조건] SELECT GROUP BY, HAVING 사용법

영앤비지 2022. 3. 21. 21:09

📌 SQL GROUP BY, HAVING

GROUP BY 절은 데이터를 원하는 그룹으로 나누고자 할 때 사용한다. 나누고자 하는 그룹을 SELECT 절과 ORDER BY 절 사이에 추가하면 된다.

HAVING 절은 그룹화한 결과에 조건을 걸고자 할 때 사용한다. HAVING 절은 집계함수를 이용한 조건비교를 할 때 사용한다. WHERE 절에서는 집계함수를 이용할 수 없다는 점이 차이점이다.

  • GROUP BY
    # 프로그래머스 고양이와 개는 몇마리 있을까
    SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) FROM ANIMAL_INS
    GROUP BY ANIMAL_TYPE
    # ANIMAL_TYPE 으로 그룹화를 한 후,
    # ANIMAL_TYPE 과 집계함수(COUNT)를 사용하여
    # 해당 ANIMAL_TYPE 의 수를 알 수 있다.
  • GROUP BY집계함수를 사용하여 특정 그룹으로 그룹화하고 싶을 때 자주 사용된다. 반면, DISTINCT 는 특정 그룹에 구분없이 중복된 데이터를 제거할 경우에 사용한다.
  • WHERE + GROUP BYWHERE 은 HAVING 과 달리, 그룹화 전에 조건이 처리된다. 선후관계에 주목하자.
  • # 프로그래머스 입양 시각 구하기 SELECT HOUR(DATETIME), count(HOUR(DATETIME)) COUNT from animal_outs WHERE HOUR(DATETIME) >= 9 and HOUR(DATETIME) <= 19 GROUP BY HOUR(DATETIME)
  • WHERE 로 조건에 맞게 테이블이 필터된 후, GROUP BY 로 그룹화 한다. 그 후 SELECT 연산을 처리한다.
  • GROUP BY + HAVING
    # 프로그래머스 동명 동물 수 찾기
    SELECT NAME, COUNT(NAME) FROM ANIMAL_INS
    GROUP BY NAME
    HAVING COUNT(NAME) >= 2
  • 그룹화 한 후 조건처리를 하고 싶을 때, HAVING 절을 사용한다.
  • WHERE + GROUP BY + HAVING위의 예제에서 동물 타입이 DOG인 동명 동물 수 찾기로 예제를 바꿔보았다.
  • # 프로그래머스 동물 타입이 DOG 인 동명 동물 수 찾기 SELECT NAME, COUNT(NAME) FROM ANIMAL_INS WHERE ANIMAL_TYPE = 'DOG' GROUP BY NAME HAVING COUNT(NAME) >= 2
  • WHERE 로 조건 처리 후, GROUP BY 로 그룹화 한다. 그 후 HAVING 으로 다시 한번 조건처리하고자 할 때 사용한다.
  • GROUP BY + ORDER BY
    # 프로그래머스 동명 동물 수 찾기
    SELECT NAME, COUNT(NAME) FROM ANIMAL_INS
    GROUP BY NAME
    HAVING COUNT(NAME) >= 2
    ORDER BY NAME DESC;
  • GROUP BY - SELECT - ORDER BY 순으로 작업이 이루어진다.