솔솔
[Oracle] 프로그래머스 입양시각 구하기(2) 본문
반응형
SQL문 실행 예시
HOUR COUNT
0 | 0 |
1 | 0 |
2 | 0 |
3 | 0 |
4 | 0 |
5 | 0 |
6 | 0 |
7 | 3 |
8 | 1 |
9 | 1 |
10 | 2 |
11 | 13 |
12 | 10 |
13 | 14 |
14 | 9 |
15 | 7 |
16 | 10 |
17 | 12 |
18 | 16 |
19 | 2 |
20 | 0 |
21 | 0 |
22 | 0 |
23 | 0 |
풀고 이해하는데 한참 걸렸네요 ㅠㅠ 그래도 한 단계 클리어해서 기분좋네요!
✨내가 이해한 풀이
[코드]
select a.hour, nvl(count, 0) "count"
from (select level -1 as hour from dual connect by level <= 24) a,
(select TO_CHAR(datetime, 'HH24') as hour, count(*) as count FROM animal_outs
group by TO_CHAR(datetime, 'HH24')) b
where a.hour = b.hour (+)
order by hour
[풀이]
1. 'animal_outs'에 있는 데이터로 2개의 임시테이블을 만든다.
- 왼쪽 테이블(a)
select level -1 as hour from dual connect by level <= 24
-- level -1 : level만 적을 시에 1부터 시작이나 -1을 적음으로써 0부터 시작
-- from dual : 임시테이블 생성
-- connet by level <= 24(값을 연속적으로 증가) : 23까지 증가 시킴(24보다 하나작은 값까지)
- 오른쪽 테이블(b)
select to_char(datetime, 'HH24') as hour, count(*) as count FROM animal_outs
group by TO_CHAR(datetime, 'HH24')
order by hour
-- to_char(datetime, 'HH24') : to_char()는 날짜를 문자열로 바꿔줌, 'animal_outs'테이블에 있는 datetime을 값으로 사용.
-- to_char(datetime, 'HH24') : 'HH -> 시간(hour)만 표시' '24 -> 24시간제로 표시(안적을시 12시간제로 표시됨)'
2. 두 테이블을 join하는데 왼쪽테이블에 기준으로 오른쪽테이블에 있는 null값도 결과로 보일 수 있게 한다.
(count 그룹 함수를 사용할 시 테이블의 'datetime'에 있는 값 외에 시간대는 집계가 안됨 그래서 left outer join함)
where a.hour = b.hour (+)
3. 두 테이블을 join했을 때 들고오고 싶은 컬럼을 선택한다. conunt컬럼의 null은 0으로 표시해준다.
select a.hour, nvl(count, 0) "count"
from (a테이블 쿼리) a,(b테이블 쿼리) b
where a.hour = b.hour (+)
order by hour
-- nvl(count, 0) 널처리 함수 : 'count는 사용할 값' '0은 지정값'
'나의보물들 > Oracle' 카테고리의 다른 글
[Oracle] Oracle [ORA-12541] no listener error (0) | 2024.11.10 |
---|---|
[Oracle] 오라클 삭제 후 재설치 (0) | 2022.03.13 |
[Oracle] Error creating JDBC Connection connection to New Oracle. (0) | 2022.03.12 |