[ 코디테스트 연습 > GROUP BY > 입양 시각 구하기 (1) ]
1. 테이블 정보
2. 문제
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다.
09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요.
이때 결과는 시간대 순으로 정렬해야 합니다.
3. 요구사항 분석 및 SQL문
-- 조회 : 입양시간, 입양횟수
-- 그룹 : 시간대별
-- 정렬 : 시간대 오름차순
SELECT
TO_CHAR(DATETIME, 'HH24') AS ADP_HOUR
, COUNT(DATETIME) AS ADP_CNT
FROM
ANIMAL_OUTS
GROUP BY
TO_CHAR(DATETIME, 'HH24')
HAVING
TO_CHAR(DATETIME, 'HH24') BETWEEN 09 AND 19
ORDER BY ADP_HOUR
>>
GROUP BY 와 HAVING 절에 별칭 (ADP_HOUR)를 사용했는데 계속 식별할 수 없다는 오류가 떴다.
ORDER BY에는 멀쩡히 인식하는 별칭을 왜 쓸 수 없는것인지,
한번 정의한 ADP_HOUR를 왜 3번이나 반복해서 써야하는지 이해 할 수 없었는데
오라클 쿼리 실행순서를 고려하지 않았기 때문이었다.
자바의 변수처럼 별칭은 한번 정의한 값을 담을 것이고, 코드는 위에서 아래로 수행 될 것이라 생각했다.
그래서 이 참에 오라클 쿼리 실행 순서를 정리해둘까 한다.
▶ 오라클 쿼리 실행순서
① FROM
② ON
③ JOIN
④ WHERE
⑤ GROUP BY
⑥ CUBE | ROLLUP
⑦ HAVING
⑧ SELECT
⑨ DISTINCT
⑩ ORDER BY
⑪ TOP
ADP_HOUR 는 SELECT 절에서 선언한 별칭이기 때문에 GROUP BY , HAVING 절에서는 식별하지 못했던 것.
반면 마지막에 실행되는 ORDER BY 절에서는 사용 할 수 있었다
그럼 먼저 실행되는 HAVING 절에서 별칭을 부여하면 인식되나 실험해봤는데 안된다...ㅋㅋㅋ
별칭 부여는 SELECT절에서만 가능한가보다. 그래도 궁굼증 해결!!
4.실행결과
'Algorithm' 카테고리의 다른 글
[ Java/ 백준 ] 2480.조건문 - 주사위 세개 (0) | 2022.11.04 |
---|---|
[Oracle / 프로그래머스] 입양 시각 구하기(2) - LEVEL, WITH AS (0) | 2022.02.17 |
[Oracle / 프로그래머스 SQL 연습] 중복 제거하기 - NULL 과 비교연산자/논리연산자 (0) | 2022.02.15 |
[Oracle / 프로그래머스 SQL 연습] SELECT > 여러 기준으로 정렬하기 (0) | 2022.02.15 |
[Java/백준] 9498.조건문 - 시험성적 (0) | 2021.05.25 |