SQL 문제 풀이(GROUP BY, HAVING)
GROUP BY, HAVING
- SQL 데이터 중 같은 내용일 경우 group을 지어주는 함수!
Programmers에서문제를 하나씩 풀이하며 기초를 다져보자!!
1. 고양이와 개는 몇 마리 있을까
- 이름으로 group을 지어서 푸는 문제
- GROUP BY(ANIMAL_TYPE) 을 실행할 경우 같은 타입의 동물끼리 뭉치게 된다.
- DISTINCT는 주로 UNIQUE(중복을 제거)한 컬럼이나 레코드를 조회하는 경우 사용한다.
- cat이 먼저 나와야하기에 order by도 꼭 빼먹으면 안된다!
- 풀이
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) as count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE ASC
2. 동명 동물 수 찾기
- 1번 문제와 반대! WHERE에 NOT을 넣어주자~
- WHERE 절에서는 집계함수를 사용 할 수 없다.
- HAVING 절은 집계함수를 가지고 조건비교를 할 때 사용한다.
- 풀이
SELECT NAME, COUNT(NAME) as 'COUNT'
FROM ANIMAL_INS
WHERE NOT NAME IS NULL
GROUP BY NAME
HAVING COUNT(NAME) > 1
ORDER BY NAME
3. 입양 시각 구하기(1)
- DATETIME에서 year, month, day등 원하는 정보를 뽑아내려면 year(datettime), month(datetime) 처럼 사용하면 된다.
- 풀이
SELECT HOUR(DATETIME) as HOUR, COUNT(ANIMAL_ID) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR > 8 AND HOUR < 20
ORDER BY HOUR
4. 입양 시각 구하기(2)
- 이 문제는 꽤나 어려웠다.
- 없는 시간까지 체크해주어야 하기 때문에 변수를 활용하여야 한다.
- set @변수명 := 데이터; 를 하면 데이터 값을 가진 변수명이 선언된다. := 는 =라고 생각하면 된다.
- 풀이
set @hour := -1;
SELECT (@hour := @hour + 1) as 'HOUR',
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour) AS 'COUNT'
FROM ANIMAL_OUTS
WHERE @hour < 23;
-
REVIEW
set @변수명 := 데이터; 꼭 기억하자!
Leave a comment