seunghyun Note

입양 시각 구하기(1) with Oracle 본문

코딩테스트/프로그래머스

입양 시각 구하기(1) with Oracle

승숭슝현 2024. 5. 11. 19:26
728x90
반응형

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/59412?language=oracle

 

프로그래머스

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

programmers.co.kr

 

문제 풀이

 

문제를 해결하기 위해서는 기본적으로 GROUP BY ,HAVING, TO_CHAR, TO_NUMBER이 필요하다.

문제의 조건을 접근할 때 계속해서 TO_CHAR로 문제를 해결하다 보니 9~20까지의 수를 가져오려고 해도 실패했다.

TO_CHAR안에 시간을 추출하면 계속해서 07,08,09 이런식으로 출력됐다. 그 이유를 찾아보니 FM 을 붙여주면 0을 없애준다.

또한 우리는 오후 7시를 19시로 표현해야 하기 때문에 FMHH24를 사용해서 오후의 시간을 잘 출력하게 해줘야 한다.

TO_CHAR로 문제를 잘 접근했다면 나머지 조건은 TO_NUMBER로 감싸주면서 문제를 해결해준다면 조금 간단해지는 거 같다.

일단 아날로그하게 문제를 읽어갔고 조건에 충족하게만 하다 보니 코드가 너무 난잡했다.......

-- TO_CHAR 를 TO_NUMBER 로 감싸준다. , 오후 시간을 표현하기 위해 24를 추가해주고 , 오전 시간의 0을 삭제하기 위해 fm
SELECT TO_NUMBER(TO_CHAR(DATETIME,'FMHH24')) AS HOUR, COUNT(TO_CHAR(DATETIME,'FMHH24')) AS COUNT 
FROM ANIMAL_OUTS
GROUP BY TO_NUMBER(TO_CHAR(DATETIME,'FMHH24'))
--group에 대한 조건을 having으로 처리한다.
HAVING TO_NUMBER(TO_CHAR(DATETIME,'FMHH24')) >= 9 AND  TO_NUMBER(TO_CHAR(DATETIME,'FMHH24')) <=20
ORDER BY TO_NUMBER(TO_CHAR(DATETIME,'FMHH24')) ASC;

 

코드가 너무 복잡하다. 또한 난잡하고 지저분하다. 코드를 다시 정리해 보자!

당황스러웠다. TO_NUMBER를 사용하고 그냥 출력을 해보니...... FM을 이용해서 0을 없애는 효과가 자동으로 삭제된다..

-> FMHH24 => HH24로 바꿈.

COUNT는 옵션이다. 그냥 전체적으로 다 세도 영향이 없다.

결국 나는 TO_NUMBER가 숫자로 변형시켜 주는 것을 망각하고 쓸데없이 코드를 길게 작성했다.

WHERE문과 BETWEEN을 이용해서 간단하게 하자!


SELECT TO_NUMBER(TO_CHAR(DATETIME,'HH24')) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE TO_NUMBER(TO_CHAR(DATETIME,'HH24')) BETWEEN 9 AND 20
GROUP BY TO_NUMBER(TO_CHAR(DATETIME,'HH24'))
ORDER BY TO_NUMBER(TO_CHAR(DATETIME,'HH24'));

 

 

728x90
반응형