문제풀이/SQL(Oracle)
입양 시각 구하기(2)
kime2
2024. 3. 22. 10:17
https://school.programmers.co.kr/learn/courses/30/lessons/59413#qna
문제
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
문제에 대한 해석
-- 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회
풀이(ORACLE)
SELECT B.LVL AS LVL
, COUNT(TO_CHAR(A.DATETIME,'HH24')) AS COUNT
FROM ANIMAL_OUTS A
RIGHT OUTER JOIN (SELECT LEVEL - 1 AS LVL
FROM DUAL
CONNECT BY LEVEL <= 24) B
ON TO_NUMBER(TO_CHAR(A.DATETIME,'HH24')) = B.LVL
WHERE B.LVL BETWEEN '0' AND '23'
GROUP BY B.LVL
ORDER BY B.LVL
level이 계층형에 대해서 순위를 매겨주는 매장함수
dual로 할때 무조건 1로 시작하는데 0시부터 해야 하니까 -1,
작동순서 -> 계층형 쿼리
💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환
SELECT B.LVL AS LVL
, COUNT(TO_CHAR(A.DATETIME,'HH24')) AS COUNT
FROM ANIMAL_OUTS A
RIGHT OUTER JOIN (SELECT LEVEL - 1 AS LVL
FROM DUAL
CONNECT BY LEVEL <= 24) B
ON TO_NUMBER(TO_CHAR(A.DATETIME,'HH24')) = B.LVL
WHERE B.LVL BETWEEN '0' AND '23' ---> 이게 없어도 정답 인정, 무슨의미일까?
GROUP BY B.LVL
ORDER BY B.LVL
- FROM 절:
- WHERE 절:
- GROUP BY 절:
- HAVING 절:
- SELECT 절:
- ORDER BY 절:
- 결과반환: