# GROUP BY - 입양 시각 구하기(2)

- Author: @mildsalmon
- Published: 2021-10-16
- Updated: 2021-10-16
- Source: http://blex.me/@mildsalmon/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-group-by-%EC%9E%85%EC%96%91-%EC%8B%9C%EA%B0%81-%EA%B5%AC%ED%95%98%EA%B8%B02
- Tags: 프로그래머스, 코딩테스트, 문제, 오라클, sql

---

# 1. 입양 시각 구하기(2)

### A. 문제

위 프로그래머스 사이트에 접속하여 문제를 확인해주세요.

### B. 내 답안

```SQL

-- Oracle
  
SELECT B.L AS HOUR,
    NVL(A.COUNT, 0) AS COUNT
FROM (
    SELECT TO_CHAR(DATETIME, 'HH24') AS HOUR, COUNT(*) AS COUNT
    FROM ANIMAL_OUTS
    GROUP BY TO_CHAR(DATETIME, 'HH24')
    ORDER BY TO_CHAR(DATETIME, 'HH24')
) A,
(
    SELECT LEVEL-1 AS L
    FROM DUAL
    CONNECT BY LEVEL <= 24
) B
WHERE A.HOUR(+) = B.L
ORDER BY B.L;

```

##### a. 회고

> 내 풀이

- `LEVEL CONNECT BY`를 사용했다.
	- 번호를 매길때 사용할 수 있다는 것은 알겠지만, 완벽하게 사용법을 숙지하지는 못했다.
- `LEVEL`을 구한 인라인 뷰와 입양 시각을 구한 인라인 뷰를 `RIGHT OUTER JOIN`했다.
	- 0시부터 23시까지의 값을 구하는 문제라서 B 테이블 부분은 전부 살리고 A 테이블에 B 테이블과 매핑되는 값이 없으면 NULL로 처리되게 하는게 최선이라 생각했다.
- B 테이블의 값 중 A 테이블에 값이 없어서 NULL로 처리된 부분을 0으로 `NVL` 함수를 사용하여 변경하였다.

# 참고문헌

GROUP BY. [코딩테스트 연습 - 입양 시각 구하기(2) | 프로그래머스 (programmers.co.kr)](https://programmers.co.kr/learn/courses/30/lessons/59413). Programmers. (accessed Oct 16, 2021)
