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 절:
- 결과반환:
'문제풀이 > SQL(Oracle)' 카테고리의 다른 글
상품을 구매한 회원 비율 구하기 - 작동순서 추가하기 (0) | 2024.03.21 |
---|---|
[문제풀이] 자동차 대여 기록 별 대여 금액 구하기 (0) | 2024.03.20 |
[문제풀이] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2024.03.20 |
[문제풀이] DATETIME에서 DATE로 형 변환 (0) | 2024.02.01 |
[문제풀이] NULL 처리하기/경기도에 위치한 식품창고 목록 출력하기 (0) | 2024.02.01 |