-
프로그래머스 SQL TEST - 입양 시각 구하기(2)Data Engineering/SQL 2022. 4. 12. 01:13728x90반응형
최근 코딩 테스트 문제를 이것 저것 풀다가 생각보다 MYSQL 문법이 PostgreSQL과 다르다는 것을 알게 되었다.. (MySQL에 없는 기능이라서 찾다가 시간 다 간적도 있음..)
이 문제는 조금 복잡하게 푼 것 같아서 기록해두고 다른 풀이 방법이 있으면 수정하려고 포스팅 한다.
(항상 SQL공부하면서 느끼는 건데 효율적인(?) 코드를 짜고 테스트하는 방법을 잘 모르겠다)
문제
ANIMAL_OUTS테이블에서 시간대별로 입양보낸 횟수를 count해서 출력하면 되는데 테이블에 없는 시간도 만들어야한다.
예를 들어 테이블에는 7시 1건, 8시 2건만 있으면 출력되어야하는 결과는 나머지 시간은 0회, 7시 1회, 8시 2회로 표시한 테이블.
풀이 방법
1. Datetime에서 시간만 추출하기 위해 SUBSTR과 숫자로 변경하기 위해 CAST를 사용했다.
2.시계에는 있는데 테이블에는 없는 시간 = 여집합이기때문에 시간을 임시테이블로 만든 후 Left outer join을 했다.
3. 기록이 없는 시간대일 경우 null이 아닌 0을 반환하기 위해 IFNULL함수를 사용했다.
코드
WITH RECURSIVE HOURS AS ( select 0 as hour union all select hour + 1 from HOURS where hour < 23 ) SELECT h.hour AS HOUR, IFNULL(seq.COUNT, 0) AS COUNT FROM HOURS AS h LEFT OUTER JOIN ( SELECT CAST(SUBSTR(datetime, 11, 3) AS UNSIGNED) AS hour, COUNT(animal_id) AS "COUNT" FROM Animal_outs GROUP BY HOUR) AS seq ON h.hour = seq.hour ORDER BY h.hour;
프로그래머스 SQL문제는 난이도가 조금 쉬운것 같다. 하지만 알고리즘 매운맛 ^^
728x90반응형'Data Engineering > SQL' 카테고리의 다른 글
몫과 나머지 구하기 (0) 2021.08.09 문자열 합치기 - CONCAT과 || (0) 2021.08.08