seunghyun Note
입양 시각 구하기(1) with Oracle 본문
링크 : 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'));
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 with Oracle (0) | 2024.05.13 |
---|---|
진료과별 총 예약 횟수 출력하기 with Oracle (0) | 2024.05.07 |
중성화 여부 파악하기 with Oracle (0) | 2024.05.07 |
[프로그래머스] [1차] 캐시 with JS (0) | 2024.02.13 |
기사단원의 무기 with JS (0) | 2024.02.08 |