코딩테스트/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 : 부호가 있는 정수형 데이터
- References