입양 시각 구하기(2)
https://school.programmers.co.kr/learn/courses/30/lessons/59413
문제 풀이
1 2 3 4 5 6 7 8 9 10
SELECT D.HOUR, COUNT(D.HOUR) AS "COUNT" FROM ( SELECT LEVEL -1 AS "HOUR" FROM DUAL CONNECT BY LEVEL < 25 ) D LEFT JOIN ANIMAL_OUTS O ON D.HOUR = TO_CHAR(O.DATETIME, 'FMHH24') GROUP BY D.HOUR ORDER BY D.HOUR;
- TO_CHAR 함수에서 “FM” 키워드는 숫자나 날짜의 형식에서 나타나는 불필요한 leading zero(앞에 나타나는 0)를 제거하는 데 사용된다. “FM” 키워드를 사용하면 포맷 문자 다음에 나타나는 leading zero가 제거된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
SELECT HOURS.HOUR, COUNT(HOUR_COUNT.ANIMAL_ID) AS "COUNT" FROM ( SELECT TO_CHAR(DATETIME, 'HH24') AS "HOUR", ANIMAL_ID FROM ANIMAL_OUTS ) HOUR_COUNT RIGHT JOIN ( SELECT LEVEL - 1 AS "HOUR" FROM DUAL CONNECT BY LEVEL <= 24 ) HOURS ON HOUR_COUNT.HOUR = HOURS.HOUR GROUP BY HOURS.HOUR ORDER BY HOURS.HOUR;
ANIMAL_OUTS
테이블에서 시간대별로 입양된 동물의 건수를 조회한다.TO_CHAR(DATETIME, 'HH24')
를 사용하여DATETIME
필드에서 시간을 추출하고,RIGHT JOIN
을 사용하여 0부터 23까지의 모든 시간대를 포함한 결과를 얻는다.
CONNECT BY LEVEL
- 오라클에서 계층형 쿼리를 작성할 때 사용되는 구문 중 하나이다.
CONNECT BY LEVEL
을 사용하면 트리 구조에서 어떤 단계에 있는지에 따라 값을 생성하거나 필터링할 수 있다.CONNECT BY LEVEL
을 사용하면LEVEL
을 활용하여 원하는 만큼의 행을 생성할 수 있다.
LEVEL
- 오라클 데이터베이스에서 실행되는 모든 쿼리에서 사용 가능한 가상 열로, 계층적인 쿼리에서 어떤 단계(LEVEL)에 위치하는지를 나타내는 정수값이다.
- 즉, 계층의 단계를 나타내는 정수값으로, 주로 계층적인 데이터를 다룰 때 사용된다. 1부터 사용자가 지정한 범위까지
LEVEL
값이 증가하면서 행을 생성한다. - 계층적인 쿼리가 아니라면,
LEVEL
은 기본적으로 모든 값이 0으로 설정된다. 즉, 계층이 없는 경우에는 모든 행이 동일한 단계(레벨 0)에 속한다고 간주한다.
DUAL
테이블과CONNECT BY LEVEL
을 사용하여 0부터 23까지의 숫자를 생성한다.
- 날짜 및 시간 포맷 지정자
TO_CHAR(DATETIME, 'HH24')
은 24시간 형식으로 시간을 나타내고,TO_CHAR(DATETIME, 'HH')
는 12시간 형식으로 시간을 나타낸다.- HH (12-hour clock)
HH
는 12시간 형식의 시간을 나타낸다.- 01부터 12까지의 값을 가진다.
- 오전(AM) 또는 오후(PM)를 나타내기 위해 AM 또는 PM을 사용한다.
09:30 AM
,04:45 PM
- 오답
- 실행 결과
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.