3. 입양시각 구하기 - HOUR로 시간 추출
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
(sol 1) HAVING절 사용!
SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR>=9 AND HOUR<20
ORDER BY HOUR
1. HOUR(DATETIME)를 사용하면 "2021.12.18 13:07:12" 로 되어있는 datetime(날짜+시간) format에서 Hour에 해당하는 "13"만 뽑아 낼 수 있다!
따라서 HOUR(DATETIME)과 COUNT(DATETIME)의 각 컬럼명을 HOUR, COUNT로 조회!
SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME) AS COUNT
2. FROM ANIMAL_OUTS(테이블 선택)
3. HOUR 에 따라 그룹화 -> GROUP BY HOUR
여기서 HOUR(DATETIME)해도 되고 HOUR만 해도 된다! -> select절에서 HOUR(DATETIME)을 HOUR로 정의해주었기 때문!
4. 그룹화한 후, 조건을 걸어준다 9시이후 20시미만. -> HAVING HOUR>=9 AND HOUR<20
조건이 2개이므로 AND로 연결해주면 된다
5. 마지막으로 HOUR에 따라 정렬 -> ORDER BY HOUR
(sol 2) WHERE 절 사용!
참고로 HAVING 과 WHERE 의 차이는( https://bskwak.tistory.com/234 ) 여기서 확인할 수 있다!
SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME)>=9 AND HOUR(DATETIME)<20
GROUP BY HOUR
ORDER BY HOUR
1. (sol 1)과 동일하게 HOUR(DATETIME)를 사용
SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME) AS COUNT
2. FROM ANIMAL_OUTS(테이블 선택)
3. 그룹화 하기 전에, 미리 조건을 걸어준다!
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME)<20
** 여기서는 HOUR(DATETIME)을 꼭! 써주어야 한다! HOUR로만 쓰게 되면,
"Unknown column 'HOUR' in 'where clause' " 라는 에러 발생
꼭 WHERE 절에 HOUR(SELECT 에서 alias 사용한 단어)로 쓰고싶다면, -> (sol 3) 참고
4. HOUR 에 따라 그룹화 -> GROUP BY HOUR
여기서 HOUR(DATETIME)해도 되고 HOUR만 해도 된다! -> select절에서 HOUR(DATETIME)을 HOUR로 정의해주었기 때문!
5. 마지막으로 HOUR에 따라 정렬 -> ORDER BY HOUR
(sol 3) WHERE 절에 alias 사용
SELECT *
FROM (SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
ORDER BY HOUR) AS t
WHERE HOUR>=9 AND HOUR<20
즉, 하나의 질의문을 FROM절에 넣을 서브쿼리로 작성한 후에 감싸고 있는 query에서 SELECT절에서 서브쿼리의 alias를 사용하여주면, WHERE절에서 해당 alias 단어 사용 가능
(서브 쿼리문) HOUR로 그룹화하고 정렬한 테이블 중 HOUR와 COUNT 컬럼으로 조회한 테이블 -> t 로 alias 사용하여 지정
'Computer Science > 자료구조와 알고리즘' 카테고리의 다른 글
[프로그래머스\SQL 고득점 kit] ISNULL (1~3번: Mysql) (3번: Oracle) (0) | 2021.12.20 |
---|---|
[프로그래머스\SQL 고득점 kit] GROUP BY - 입양 시각 구하기(2) 풀이 2가지 (mysql) (0) | 2021.12.18 |
[프로그래머스\SQL 고득점 kit] GROUP BY - 고양이와 개는 몇마리 있을까, 동명 동물 수 찾기 (mysql) (0) | 2021.12.17 |
[프로그래머스\SQL 고득점 kit] SUM, MAX, MIN :Mysql (0) | 2021.12.17 |
[프로그래머스\SQL 고득점 kit] SELECT문 :Mysql(1~7번), Oracle(7번) (0) | 2021.12.12 |