LEVEL을 활용한 문제
https://school.programmers.co.kr/learn/courses/30/lessons/59413
-- 코드 풀이
SELECT
B.TIME AS HOUR
, NVL(COUNT(AO.ANIMAL_ID), 0) AS COUNT
FROM ANIMAL_OUTS AO
RIGHT OUTER JOIN (SELECT LEVEL -1 TIME
FROM DUAL
CONNECT BY LEVEL <= 24) B
ON B.TIME = TO_NUMBER(TO_CHAR(AO.DATETIME, 'HH24'))
GROUP BY B.TIME
ORDER BY B.TIME;
LEVEL
- 숫자 형식으로 계층 수준(상위 → 하위)를 식별하기 위해 계층 쿼리에서 사용되는 의사 열을 나타냄
- root 행에 대해 1을 부여하며 그 다음 행은 2, 3, 4 ..가 되는 구조로 반환함
- 이 같은 구조는 CONNECT BY절 사용을 통해 만들 수 있음
CONNECT BY
- 계층 구조의 상위 행과 하위 행 간의 계층 관계를 정의해주는 것
DUAL
- 더미 테이블
- 더미 테이블에 LEVEL 값을 각 행에 부여하여 반환하는 것
예시
EX1) 기본 예제
SELECT LEVEL
FROM DUAL
CONNECT BY LEVEL <= 5
LEVEL |
1 |
2 |
3 |
4 |
5 |
EX2) 답안 예제 속 서브 쿼리
- (LEVEL -1) 이기에 0~23까지 행이 반환 되는 것
SELECT LEVER -1 HOUR
FROM DUAL
CONNECT BY LEVEL <= 24
HOUR |
0 |
1 |
2 |
(중간 생략) |
22 |
23 |
'Database > Oracle' 카테고리의 다른 글
[MySQL & Oracle] MySQL과 Oracle의 차이 (0) | 2023.08.22 |
---|---|
[Oracle] Oracle이란? (0) | 2023.08.22 |