📌 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 순으로 작업이 이루어진다.
'IT > sql' 카테고리의 다른 글
[SQL 개수 제한] SELECT LIMIT 사용법 (0) | 2022.03.21 |
---|---|
[SQL 정렬] SELECT ORDER BY 사용법, 오름차순, 내림차순, 역순 (0) | 2022.03.21 |
[SQL 조건문] SELECT WHERE 사용법 (0) | 2022.03.21 |
[SQL 별칭/별명] SELECT AS(alias) 사용법 (0) | 2022.03.21 |
[SQL 조건문] SELECT CASE WHEN THEN 사용법 (0) | 2022.03.21 |