Algorithm/문제풀이(SQL)

[프로그래머스 SQL 문제] GROUP BY 문제풀이

YoungBok 2022. 3. 29. 20:49
728x90
반응형

[문제설명]

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

ANIMAL_INS 테이블

 

[고양이와 개는 몇 마리 있을까] 동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하며 이때 고양이를 개보다 먼저 조회하기

: GROUP BY를 이용하고 COUNT 함수를 이용하여 몇 마리인지 조회하고 고양잉를 먼저 조회하기 위해 ANIMAL_TYPE을 ORDER BY 오름차순(ASC, 기본)으로 설정

SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) as count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE; -- 고양이를 개보다 먼저 조회

 

[동명 동물 수 찾기] 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하기 (름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회)

: 그룹으로 나뉜 동물들 중에서 두 번 이상 쓰인 경우만 조회하기 위해 HAVING을 사용하고 ORDER BY를 이용해 이름순(오름차순)으로 조회하도록 설정

SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) >= 2 # 두 번 이상 쓰인 경우
ORDER BY NAME; # 이름순으로 조회

 

[입양 시각 구하기(1)] 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회 (결과는 시간대 순으로 정렬)

SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR -- 각 시간대별
HAVING HOUR >= 9 AND HOUR <= 19 -- 09:00부터 19:59까지
ORDER BY HOUR; -- 시간대 순으로 정렬

 

[입양 시각 구하기(2)] 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회 (결과는 시간대 순으로 정렬)

SET @HOUR = -1;
SELECT (@HOUR := @HOUR +1) AS HOUR,
    (SELECT COUNT(HOUR(DATETIME)) -- @HOUR와 일치하는 시간을 COUNT
    FROM ANIMAL_OUTS 
    WHERE HOUR(DATETIME)=@HOUR) AS COUNT 
    FROM ANIMAL_OUTS
WHERE @HOUR < 23;

 


출처: https://programmers.co.kr/learn/courses/30/parts/17044

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

728x90
반응형