본문 바로가기
프로그래머스/MySQL

[프로그래머스] 입양 시각 구하기(1) - MySQL - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2024. 9. 27.
728x90
반응형

 

https://school.programmers.co.kr/learn/courses/30/lessons/59412

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 설명

반응형

2. 풀이과정

해당 문제는 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 문제이다.

09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하려면 DATETIME 형식으로 되어 있는 입양일 컬럼에서 시간대를 추출해 새로운 컬럼을 만들어야 한다.

 

새로운 컬럼을 만들기 위해 서브쿼리를 활용한다.

서브쿼리는 하나의 SQL 문 안에 포함되어 있는 또 다른 SQL 문을 말하고 메인쿼리가 서브쿼리를 포함하는 종속적인 관계이다.

FROM 절에 서브쿼리를 사용하여 데이터를 조회할 테이블에서 시간대 컬럼을 새로 생성하여 조회한다.

서브쿼리는 여러 절에서 사용 가능한데 FROM 절에 사용하면 인라인 뷰(Inline View)라고 한다.

FROM 절에 서브쿼리가 사용되면 동적으로 생성된 테이블로 사용할 수 있다.

동적으로 생성된 테이블이라 컬럼은 자유롭게 사용 가능하지만 데이터베이스에 저장되지는 않는다.

 

FROM 절에 서브쿼리를 사용하여 날짜 컬럼에서 시간대를 추출한다.

시간대를 추출할 때는 DATE_FORMAT() 함수를 사용하여 '%H'를 적용하면 시간대를 24시간 형식으로 추출할 수 있다.

시간대를 추출한 테이블을 가지고 해당 컬럼을 기준으로 그룹을 만들어 시간대별로 입양이 몇 건이나 발생했는지 조회한다.

여기서 시간대는 09:00부터 19:59까지이므로 가져올 시간대는 9시부터 19시까지이다.

시간대를 그룹으로 만들었기 때문에 시간대를 가져올 조건은 HAVING 절에 작성한다.

최종 결과는 시간대 순으로 정렬해야 한다.

 

  1. 시간대와 시간대별 입양 건수를 조회한다. 입양 건수는 그룹을 만든 시간대의 값을 COUNT() 함수로 개수를 세어 COUNT 컬럼명으로 지정한다. SELECT HOUR, COUNT(HOUR) AS COUNT
  2. 값을 조회할 테이블을 지정한다. 지정한 테이블에 시간대 값이 저장되어 있는 컬럼이 없기 때문에 서브쿼리를 활용하여 시간대 컬럼이 있는 테이블을 동적으로 생성한다. 시간대는 입양일이 저장되어 있는 컬럼에 DATE_FORMAT() 함수를 활용하여 시간만 24시 형식으로 추출한다. FROM (SELECT DATE_FORMAT(DATETIME, '%H') AS HOUR
  3. 서브쿼리에서 값을 조회할 테이블을 지정하고 서브쿼리로 생성된 테이블을 H로 저장한다. FROM ANIMAL_OUTS) AS H
  4. 시간대별로 입양 건수를 구해야 하므로 시간대 값을 기준으로 그룹을 생성한다. GROUP BY HOUR
  5. 그룹을 생성한 테이블에서 시간대 조건을 적용해야 하므로 HAVING 절에 조건을 작성하여 09:00부터 19:59까지 시간대 데이터만 조회한다. HAVING HOUR >= 9 AND HOUR <= 19
  6. 최종 결과는 시간대 순으로 정렬하여 조회한다. ORDER BY HOUR
728x90

3. 소스코드

SELECT HOUR, COUNT(HOUR) AS COUNT
FROM (
    SELECT DATE_FORMAT(DATETIME, '%H') AS HOUR
    FROM ANIMAL_OUTS) AS H
GROUP BY HOUR
HAVING HOUR >= 9 AND HOUR <= 19
ORDER BY HOUR
728x90
반응형