본문 바로가기
문제풀이/SQL(Oracle)

입양 시각 구하기(2)

by kime2 2024. 3. 22.
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

  1. FROM 절
  2. WHERE 절:
  3. GROUP BY 절:
  4. HAVING 절:
  5. SELECT 절
  6. ORDER BY 절:
  7. 결과반환