Notice
Recent Posts
Recent Comments
Archives
반응형
«   2025/01   »
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
Today
Total
01-10 13:17
250x250
관리 메뉴

꿈꾸는 개발자의 블로그

[프로그래머스] Oracle - (SQL 고득점 Kit) GROUP BY 입양 시각 구하기(2) 본문

Algorithm/Programmers

[프로그래머스] Oracle - (SQL 고득점 Kit) GROUP BY 입양 시각 구하기(2)

aldrn29 2023. 2. 21. 17:25

문제

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 1) 각 시간대별로 2) 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

 

문제 풀이

  1. 각 시간대 별로 조회하기 위하여 GROUP BY로 묶는다.
  2. 총 입양 건수를 구하기 위하여 count 함수로 조회한다.
  3. 0~23까지 CONNECT BY LEVEL 구문으로 순차목록을 만들어 위의 서브쿼리와 LEFT OUTER JOIN 한다. (LEFT OUTER JOIN : 왼쪽에 오는 테이블의 데이터는 모두 조회하고, 오른쪽에 오는 ANIMAL_OUTS 테이블에 입양 시간별 건수가 없는 경우에는 NULL로 JOIN 하기 위함)
  4. NVL 함수를 사용하여 오른쪽 쿼리에 들어간 NULL 데이터를 0으로 처리한다.

 

전체 코드

SELECT a.HOUR, NVL(b.COUNT, 0)
FROM (
    SELECT LEVEL - 1 AS HOUR
    FROM DUAL
    CONNECT BY LEVEL < 25
) a LEFT OUTER JOIN (
    SELECT TO_NUMBER(TO_CHAR(DATETIME, 'HH24')) AS HOUR, count(*) AS COUNT
    FROM ANIMAL_OUTS
    GROUP BY TO_CHAR(DATETIME, 'HH24')
) b ON a.HOUR = b.HOUR
ORDER BY 1

 

728x90
728x90
Comments