코딩테스트/SQL 코딩테스트

<프로그래머스> 입양 시각 구하기(1)

배또가또 2023. 12. 19. 11:05

출처 :  https://school.programmers.co.kr/learn/courses/30/lessons/59412

 

프로그래머스

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

programmers.co.kr


 


  • 문제 요구사항
    • 보호소에서 몇 시에 입양이 가장 활발히 일어나는지 알아보려함
    • 09시부터 19:59분까지
    • 각 시간대별로 입양이 몇 건이나 발생했는지 조회
    • 결과는 시간 순으로 정렬
    • 결과가 예시 형식과 맞아야함

09시부터 19시 59분까지 조건을 위해 시간을 조건으로 걸어줘야함

MySQL은 DATE_FORMAT, Oracle은 TO_CHAR를 이용하여 DATETIME형식의 데이터의 시간만 뽑아내야함

해당 시간대에 입양이 몇 건 발생했는지 조회하기 위해서 GROUP BY와 COUNT()를 사용해야함

 

결과가 예시형식과 맞아야 하기 때문에 MySQL은 CAST로 Oracle은 TO_NUMBER로 형변환을 수행함


1) Oracle

SELECT TO_NUMBER(TO_CHAR(DATETIME, 'HH24')) AS HOUR, 
       COUNT(*) AS "COUNT"
FROM ANIMAL_OUTS
WHERE TO_CHAR(DATETIME, 'HH24') >= 9 AND TO_CHAR(DATETIME, 'HH24') <= 19
GROUP BY TO_CHAR(DATETIME, 'HH24') 
ORDER BY TO_CHAR(DATETIME, 'HH24');

 

TO_CHAR()에서 'HH24'로 24시간 형식의 포맷으로 DATETIME을 형변환

24시간 형변환 시 오전 9시면 '09'로 표기되기 때문에 '9'로 출력하기 위해서 TO_NUMBER로 출력 형변환


2) MySQL

SELECT CAST(DATE_FORMAT(DATETIME, '%H') AS SIGNED) AS HOUR, 
       COUNT(*) AS "COUNT"
FROM ANIMAL_OUTS
WHERE DATE_FORMAT(DATETIME, '%H') >= 9 AND DATE_FORMAT(DATETIME, '%H') <= 19
GROUP BY 1 
ORDER BY 1;

 

DATE_FORMAT()에서 '%H'로 24시간 형식의 포맷으로 DATETIME을 형변환

24시간 형변환 시 오전 9시면 '09'로 표기되기 때문에 '9'로 출력하기 위해서 CAST(target AS SIGNED)로 출력 형변환

* SIGNED : 부호가 있는 정수형 데이터