반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Hellow gyu`s world

프로그래머스 SQL LV4 입양시각 구하기(2) 풀이 본문

데이터 분석/SQL

프로그래머스 SQL LV4 입양시각 구하기(2) 풀이

규팍규 2022. 10. 13. 14:01
반응형

1. https://school.programmers.co.kr/learn/courses/30/lessons/59413

 

프로그래머스

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

programmers.co.kr

 

난이도가 LV4 되어있지만..체감상 엄청 쉬웠던 문제..

원하는 답이 시간대별(00H~23H) 입양 COUNT를 구하는 것인데 테이블에는 전체 시간대가 존재하지 않고 입양 시각만 존재함. 이 경우에 날짜를 붙일때 달력 테이블을 이용하는 것과 똑같은 개념으로 접근함 즉, 0부터 24까지의 시간대별과 기존 테이블에서 시간대 별 카운트 개수를 래프트 조인으로 붙여주고 NULL값을 0으로 처리해주면 됨.

추후에 수정함 ㅎㅎ;; 퀄리틱 ㅏㅎㅎ;

처음 문제를 보자마자 든 생각은 postgresql 기준으로 generate_seriese 함수를 이용해서 00~24를 생성한 후 여기에다 기존테이블 데이터를 붙여야겠다 했지만 정답 제출에 사용하는 db는 mysql이므로 재귀함수를 이용.

00~24를 생성하기위해 RECURSIVE문을 이용함 아래에 쿼리문 첨부

 

 

정답 : 

WITH RECURSIVE nums AS (
    SELECT 0 AS value -- 0부터 시작
    UNION ALL
    SELECT value + 1 AS value  
    FROM nums
    WHERE nums.value <= 22   --반복시작 00시는 24시이므로 23시까지만 나오게 범위 설정
)
SELECT nums.value, ifnull(t2.value,0) -- 입양정보가 없는 시간대에는 NULL값이 되므로 NULL을 0으로 처리
FROM nums 
left join (
            select hour(datetime) as t2_key, count(1) AS value
            from animal_outs
            group by 1 -- 시간대별 입양 카운트 개수를 00~24 시간대에 래프트 조인
            ) t2
    on nums.value = t2.value -- 조인 키값은 시간대
order by 1 asc

 

혹시 제가 틀렸거나 다른 의견이 있으시면 댓글로 달아주시면 감사하겠습니당

반응형