SQL 문제 풀이(GROUP BY, HAVING)

1 minute read

GROUP BY, HAVING

  • SQL 데이터 중 같은 내용일 경우 group을 지어주는 함수!

Programmers에서문제를 하나씩 풀이하며 기초를 다져보자!!

1. 고양이와 개는 몇 마리 있을까

LINK

  • 이름으로 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. 동명 동물 수 찾기

LINK

  • 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)

LINK

  • 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)

LINK

  • 이 문제는 꽤나 어려웠다.
  • 없는 시간까지 체크해주어야 하기 때문에 변수를 활용하여야 한다.
  • 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 @변수명 := 데이터; 꼭 기억하자!

Tags:

Categories:

Updated:

Leave a comment