[프로그래머스 / Level 4] 입양 시각 구하기(2) (sql)

khyojun·2022년 8월 6일
0

코테연습

목록 보기
21/21
post-thumbnail

📌문제 설명

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다.
NAME TYPE NULLABLE
ANIMAL_ID VARCHAR(N) FALSE
ANIMAL_TYPE VARCHAR(N) FALSE
DATETIME DATETIME FALSE
NAME VARCHAR(N) TRUE
SEX_UPON_OUTCOME VARCHAR(N) FALSE
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

📌 Solution
여러 코딩테스트 문제들을 풀면서도 sql도 한번 연습하여보고자 문제들을 풀다가 이 문제는 진짜 계속계속 생각을 해도 풀리지가 않아 구글링을 해보며 문제를 해결하였다.

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<=22
        

여기서 내가 몰랐던 부분이 set 이라는 것을 통하여서 임의의변수를 하나 등록하고 증가시키는 것이었는데
set @변수명=값; 을 하면 변수로 지정이된다는 것을 알게 되었다.

그렇게 select문을 작성하던 도중 그러면 count를 각 시간마다 해야하는데 이것을 어떻게 해야할까? 라는 고민에 또 빠지게 되었는데 select count(*) ~~~ 문을 작성하게 되면 각 column에 해당하는 것의 갯수를 표기를 하는데 여기서 where문을 작성하여 각 시간마다 해당하는 column이 있는지 계속해서 확인하여주는 작업을 진행시켜주었다.

그리고 또 마지막에 있는 where @hour<=22 이라는 것이있는데 이것을 보통 23까지면 23까지만 하고 끝내는경우가 있는데 23으로 하게 되면 24까지가 출력되는것을 보아하니 select문에서 더하고 대입하여준 후 그 column을 출력을 하고 나중에 조건문을 확인하고 끝나는 것임을 알게 되었다.

아무튼 이번 문제는 정말로 알지 못하면 풀기가 상당히 까다로운 문제였던 것 같다.

문제 해결하며 알게 된 점

  1. set @변수명 = 값; 을 통하여 sql에서도 변수 선언을 할 수 있다.
profile
코드를 씹고 뜯고 맛보고 즐기는 것을 지향하는 개발자가 되고 싶습니다

0개의 댓글