[프로그래머스\SQL 고득점 kit] GROUP BY - 입양 시각 구하기(1) 풀이 3가지 mysql

2021. 12. 18. 15:11·Computer Science/자료구조와 알고리즘

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
'Computer Science/자료구조와 알고리즘' 카테고리의 다른 글
  • [프로그래머스\SQL 고득점 kit] ISNULL (1~3번: Mysql) (3번: Oracle)
  • [프로그래머스\SQL 고득점 kit] GROUP BY - 입양 시각 구하기(2) 풀이 2가지 (mysql)
  • [프로그래머스\SQL 고득점 kit] GROUP BY - 고양이와 개는 몇마리 있을까, 동명 동물 수 찾기 (mysql)
  • [프로그래머스\SQL 고득점 kit] SUM, MAX, MIN :Mysql
BS Kwak
BS Kwak
  • BS Kwak
    Slow but steady wins the race
    BS Kwak
  • 전체
    오늘
    어제
    • 카테고리 (161)
      • Project (2)
      • Next.js (3)
      • HTML+CSS+JS (17)
      • Computer Science (139)
        • Programming Language (52)
        • 자료구조와 알고리즘 (75)
        • Digital circuit (3)
        • 기타 error (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    leetcode
    런타임 에러
    mysql error
    LNK2001
    c++error
    오블완
    cmd error
    티스토리챌린지
    해시
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
BS Kwak
[프로그래머스\SQL 고득점 kit] GROUP BY - 입양 시각 구하기(1) 풀이 3가지 mysql
상단으로

티스토리툴바