코딩테스트 연습 > GROUP BY > 입양 시각 구하기(1)
난이도: Lv.2
언어: MySQL
https://school.programmers.co.kr/learn/courses/30/lessons/131533
실패
없습니다.
성공
성공1. *채택
SELECT
HOUR(a.DATETIME) AS HOUR
, COUNT(a.ANIMAL_ID) AS COUNT
FROM ANIMAL_OUTS a
WHERE 1=1
AND TIME_FORMAT(TIMEDIFF('19:59', DATE_FORMAT(a.DATETIME, '%H:%i')), '%H:%i') >= '00:00'
AND TIME_FORMAT(TIMEDIFF(DATE_FORMAT(a.DATETIME, '%H:%i'), '09:00'), '%H:%i') >= '00:00'
GROUP BY HOUR
ORDER BY HOUR
문제에서 09:00~19:59 사이의 시간을 원했기 때문에, 그 시간 내에 있는 것을 정확히 명시해주고 싶었습니다.
따라서 TIME_FORMAT으로 시간, 분의 형식을 명시해주었고 TIMEDIFF으로 '시간:분'의 차이를 계산하였습니다.
TIME_FORMAT과 TIMEDIFF에 대한 정보는 chatGPT에게서 알게 되었습니다. 더보기에 질문과 답변이 적혀있습니다.
*참고 chatGPT
질문:
MYSQL에서 '20:30'이라는 '%H:%M' 형식 데이터를 '19:59' 으로 빼서 그 차이의 값을 '%H:%M'으로 나타낼 수있는 방법?
답변:
MySQL에서 두 시간을 뺄 때는 TIMEDIFF 함수를 사용할 수 있습니다. 그러나 TIMEDIFF 함수는 결과를 시간 형식으로 반환하지 않습니다. 반환 값은 'HH:MM:SS' 형식의 문자열입니다.
두 시간을 뺀 후에 원하는 형식으로 결과를 나타내려면, TIME_FORMAT 함수를 함께 사용하여 형식을 변경할 수 있습니다.
다음은 예시입니다:
SELECT TIME_FORMAT(TIMEDIFF('20:30', '19:59'), '%H:%i') AS time_difference;
위의 쿼리에서 TIMEDIFF 함수로 두 시간의 차이를 계산하고, 그 결과를 TIME_FORMAT 함수로 '%H:%i' 형식으로 변환합니다. %H는 시간을, %i는 분을 나타냅니다.
참고로, TIMEDIFF 함수는 음수 값을 반환할 수 있습니다. 음수 값은 첫 번째 인자가 두 번째 인자보다 이전인 경우입니다. 결과를 양수로 표현하려면 ABS 함수를 사용하여 절댓값을 취할 수 있습니다:
SELECT TIME_FORMAT(ABS(TIME_TO_SEC(TIMEDIFF('20:30', '19:59'))), '%H:%i') AS time_difference;
이 쿼리에서는 TIME_TO_SEC 함수를 사용하여 시간 차이를 초 단위로 변환하고, ABS 함수로 절댓값을 취한 후 TIME_FORMAT 함수로 형식을 변경합니다.
성공2.
SELECT HOUR(a.DATETIME) AS HOUR, COUNT(a.ANIMAL_ID) AS COUNT
FROM ANIMAL_OUTS a
GROUP BY HOUR
HAVING HOUR >= 9 AND HOUR < 20
ORDER BY HOUR ASC
'19:61'과 같이 입력 데이터에 오류가 있어도 통과되는 예제입니다.
HOUR을 이용해 DATE_FORMAT 대신 HOUR을 바로 뽑아오고, HAVING을 이용해 시간을 명시해주며 간단하고 직관적으로 느껴졌습니다.
더보기에 출처 남겨두었습니다.
성공3.
SELECT DATE_FORMAT(a.DATETIME, '%H') AS HOUR, COUNT(a.ANIMAL_ID) AS COUNT
FROM ANIMAL_OUTS a
WHERE 1=1
AND DATE_FORMAT(a.DATETIME, '%H:%M') >= '09:00'
AND DATE_FORMAT(a.DATETIME, '%H:%M') < '20:00'
GROUP BY HOUR
ORDER BY HOUR ASC
성공1과 유사한 방법이나, '19:61'과 같이 입력 데이터에 오류가 있어도 통과되는 예제입니다.
맨 처음으로 이 방법을 채택했으나, 이상한 데이터가 DB에 적재되는 것이 마음에 들지 않아, 성공1 방법으로 변경하였습니다.
*참고 chatGPT
성공1에 더보기로 기재하였습니다.
코드에 질문이 있으시면 댓글을 달아주세요. 최대한 빠른 시일 내에 답변해드리겠습니다.
봐주셔서 감사합니다.
'Study > SQL' 카테고리의 다른 글
[프로그래머스 SQL] 고양이와 개는 몇 마리 있을까 (0) | 2024.01.15 |
---|---|
[프로그래머스 SQL] 최댓값 구하기 (0) | 2024.01.12 |
[프로그래머스 SQL] 상품 별 오프라인 매출 구하기 (0) | 2024.01.12 |
[프로그래머스 SQL] 루시와 엘라 찾기 (0) | 2024.01.12 |
[프로그래머스 SQL] 3월에 태어난 여성 회원 목록 출력하기 (0) | 2024.01.12 |