-
[프로그래머스_SQL] 입양시각구하기(2)프로그래머스_코딩테스트 2022. 7. 7. 16:47
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요
ANIMAL_OUTS 테이블 예시
A349480 Dog 2013-12-22 11:30:00 Daisy Spayed Female A349733 Dog 2017-09-27 19:09:00 Allie Spayed Female A349990 Cat 2018-02-02 14:18:00 Spice Spayed Female A349996 Cat 2018-02-02 14:17:00 Sugar Neutered Male A350276 Cat 2018-01-28 17:51:00 Jewel Spayed Female 오라클 만이 가진 강력한 기능 중 하나로, 테이블에 계층형 데이터가 존재하는 경우 이를 조회하기 위한 쿼리를 뜻한다.
계층형 데이터란 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 말한다.START WITH 절은 계층 구조 전개의 시작 위치를 지정한다.
CONNECT BY 절은 다음에 전개될 자식 데이터를 지정하는데, PRIOR를 주로 사용해서 지정한다.이때 PRIOR 자식 = 부모 형태를 쓸 경우 순방향 전개, PRIOR 부모 = 자식 형태를 쓸 경우 역방향 전개를 한다.
CONNECT BY 절에서 [NOCYCLE]은 데이터를 전개하면서 중복 데이터가 나타는 것을 방지해준다.
ORDER SIBLINGS BY 절은 형제 노드(동일 LEVEL) 사이에서 정렬을 수행해준다.SELECT hours.hour, NVL(cnt, 0) "COUNT" FROM (SELECT TO_CHAR(datetime, 'HH24') as hour, COUNT(*) cnt FROM animal_outs GROUP BY TO_CHAR(datetime, 'HH24')) outs, (SELECT LEVEL-1 AS hour FROM DUAL CONNECT BY LEVEL <=24) hours WHERE hours.hour = outs.hour(+) ORDER BY hour
1. DATETIME을 24시간 형태 문자열로 바꾼다.
2. GROUP BY을 사용하여, 시간 별 칼럼 개수를 구한다.
CONNECT BY 문을 사용하여 1~24을 표현, 계층적 데이터를 표현하기 위해서 사용
1. CONNECT BY문의 조건을 LEVEL이 24와 같거나 작을 때까지로 지정
2. SELECT (LEVEL-1) AS HOUR FROM DUAL CONNECT BY LEVEL <= 24
이 코드는 순차적 목록을 만들 때 유용한 코드이다.
1. 시간별(hours.hour)로 입양된 동물(NVL(cnt, 0))을 출력
NVL : 첫번째 인자(cnt)가 NULL이라면 두번쨰 인자(0)으로 치환한다.
2. hours의 hour과 outs의 hour을 기준으로 JOIN
3. 시간 순으로 정렬하기 위해 ORDER BY hour
SELECT HOUR, COUNT(O.DATETIME) AS COUNT --(1) FROM ( SELECT LEVEL-1 AS HOUR FROM DUAL CONNECT BY LEVEL<25 )A LEFT JOIN ANIMAL_OUTS O --(2) ON A.HOUR = TO_CHAR(O.DATETIME,'HH24') --(3) GROUP BY HOUR --(4) ORDER BY HOUR; --(5)
1. COUNT(*) 로 작성하게 되면, 해당 시간에 데이터가 없어도 1 로 카운팅 되기 때문에 ANIMAL_OUTS의 DATETIME 컬럼 으로 묶어준다.
2. 0~23에 데이터가 없어도 출력이 되어야 하므로 LEFT JOIN 을 사용한다.
3. JOIN 조건으로, ANIMAL_OUTS의 DATETIME 컬럼을 'HH24' 로 변환시켜준다.
https://cherry-beer.tistory.com/5
반응형'프로그래머스_코딩테스트' 카테고리의 다른 글
[프로그래머스]Python lv2 최대값 최소값 (0) 2022.09.17 [프로그래머스_SQL] NULL 값 처리하기 (0) 2022.07.07 [프로그래머스_SQL] 우유와 요거트가 담긴 장바구니 lv4 (0) 2022.07.07 [프로그래머스_SQL] 보호소에서 중성화 한 동물 (0) 2022.07.07 [프로그래머스_SQL]오랜기간 보호한 동물(1) (0) 2022.07.07