-
[SQL/프로그래머스] 입양 시각 구하기(2) , CONNECT BY코딩테스트/프로그래머스 2023. 3. 22. 09:55
https://school.programmers.co.kr/learn/courses/30/lessons/59413
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
SELECT to_char(datetime,'HH24') as HOUR, COUNT(*) from ANIMAL_OUTS GROUP BY to_char(datetime,'HH24') order by HOUR
처음엔 단순히 DATETIME을 문자형으로 변경해서 GROUP BY로 묶었는데 위와 같이 출력됐다. 문제는 0~23시까지 모두 출력해야 됐기에 숫자를 연속적으로 출력하는 방법을 알아야 된다.
📑 일렬 숫자 생성하기
일렬 숫자를 출력하려면 CONNECT BY 연산자를 사용해야 한다. CONNECT BY는 계층형 쿼리에서 START WITH 과 함께 사용한다고만 생각했는데 이렇게 사용할 수도 있다.
🎈 1부터 5까지 출력 쿼리
SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=5;
SELECT ROWNUM FROM DUAL CONNECT BY LEVEL <=5;🎈 10부터 15까지 출력 쿼리
SELECT LEVEL+9 FROM DUAL CONNECT BY LEVEL+9 < 16;
SELECT ROWNUM+9 FROM DUAL CONNECT BY LEVEL+9 < 16;📑 문제 정답
WITH COUNT_HOUR AS (SELECT LEVEL-1 AS HOUR FROM DUAL CONNECT BY LEVEL -1< = 23) SELECT A.HOUR , NVL(COUNT(B.animal_id),0) COUNT FROM COUNT_HOUR A LEFT OUTER JOIN ANIMAL_OUTS B ON A.HOUR = to_char(datetime,'HH24') GROUP BY A.HOUR ORDER BY A.HOUR
COUNT(*)이 아닌 COUNT(A 테이블 컬럼 이름)을 적어줘야 NULL로 뽑아낼 수 있으니 참고
반응형'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[SQL/프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) 2023.03.17 [SQL/프로그래머스] 헤비 유저가 소유한 장소 , 다중행 서브쿼리, 인라인뷰, 분석함수 (0) 2023.03.16 [SQL/프로그래머스] 오랜 기간 보호한 동물(1) rownum, rank() (0) 2023.03.15 [SQL/프로그래머스] 없어진 기록 찾기 (NOT IN, NOT EXISTS) (0) 2023.03.15 [SQL/프로그래머스] 조건에 맞는 회원수 구하기, 특정 날짜 조건 주기 (0) 2023.01.20