본문 바로가기

SQL

[프로그래머스] SQL-GROUP BY 관련 모든 문제

반응형

프로그래머스 SQL GROUP BY 문제를 모아서 정리하였습니다.

 

 

 

 

문제1. 고양이와 개는 몇 마리 있을까 - 동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.

 

SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE

 

GROUP BY를 사용하면 동일한 이름의 데이터가 묶여서 나온다. 여기서 COUNT를 해주면 각 데이터의 갯수를 구할 수 있다.

 

 

 

 

문제2. 동명 동물 수 찾기 - 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.

 

SELECT NAME,COUNT(NAME)
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) > 1
ORDER BY NAME

 

HAVING은 그룹화 한 후 이를 기반으로 조건에 맞는 데이터를 추출한다.
NULL은 1보다 크다는 조건에 부합하지 않아 자동으로 걸러지지만, 식을 추가하고 싶다면
WHERE NAME is NOT NULL
을 FROM 다음에 추가하면 된다.
조건문 참고 블로그

 

 

 

 

문제3. 입양 시각 구하기(1) - 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

 

SELECT HOUR(DATETIME) AS HOUR, COUNT(HOUR(DATETIME)) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR > 8 AND HOUR < 20
ORDER BY HOUR

 

HOUR을 통해서 시간만 따로 뺴낼 수 있었다.
HAVING에 변수로 사용하려면 따로 이름을 지정해주어야되더라.
HAVING HOUR BETWEEN 9 AND 19으로도 사용 가능하다.

 

 

 

 

문제4. 입양 시각 구하기(2) - 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

몰라서 이분 블로그를 보고 작성하였습니다.

 

[프로그래머스] 입양 시각 구하기(1), (2) (GROUP BY, HAVING, SET)

[프로그래머스] 입양 시각 구하기(1), (2)

chanhuiseok.github.io

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

 

SET을 통해 변수를 선언할 수 있다.
(@hour := @hour+1) - 1씩 증가하면서 표시해준다.
@hour 과 동일할때 데이터 수를 카운트 해주었다.

 

반응형