30대 갓생살기😍

반응형

 

 

 

코딩테스트 연습 - 입양 시각 구하기(2)

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물

programmers.co.kr

해당 글은 Programmers 코딩테스트 연습을 토대로 MYSQL 로 작성되었습니다.

 


Q 문제:  입양 시각 구하기 (2) 

 문제풀이 : 

WITH RECURSIVE
            NEWTABLE AS 
              ( SELECT 0 AS HOUR
                UNION ALL
                SELECT HOUR + 1
                FROM NEWTABLE
                WHERE HOUR < 23 )
SELECT      NEWTABLE.HOUR, COUNT(ani.ANIMAL_ID) AS COUNT
FROM        NEWTABLE
LEFT JOIN   ANIMAL_OUTS AS ani
ON          NEWTABLE.hour = HOUR(ani.DATETIME)
GROUP BY    NEWTABLE.hour

 

해당문제는 CTE(공통테이블)식을 사용하는 재귀쿼리 (Recursive Query)가 사용되었으며 위 코드는

아래 링크댓글을 인용하여 정리해보았습니다.  ▼ 아래 링크 

 

프로그래머스

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

programmers.co.kr


E 상세설명

1. WITH RECURSIVE 를 이용하여 01시에서 23시까지 존재하는 HOUR컬럼 테이블을 생성해줍니다. 

2. 기본 ANIMAL_OUTS 테이블과 LEFT JOIN(조인)을 해줍니다.

3. GROUP BY SQL문을 이용하여 HOUR(시간)을 그룹화를 해줍니다.

4. SELECT를 이용하여 시간대와 시간대별 입양된 개수를 파악합니다.

 

 

RECURSIVE QUERY(재귀쿼리) : 

위 SQL문에 작성된 RECURSIVE(재귀)는 영어로는 반복[되풀이]되는 뜻으로 이러한 SQL문을 RECURSIVE FUNCTION(재귀함수)가 사용되었다고 합니다. 재귀함수를 조금 더 설명해보자면 자기 자신을 호출하여 이용하는 함수입니다.

WITH RECURSIVE
		CTE_테이블명 AS
        (SELECT 문 
       	)
SELECT 문 
FROM 테이블명1
LEFT JOIN 테이블명2
ON 테이블1.기준컬럼 = 테이블2.기준컬럼 
GROUP BY 그룹기준 컬럼 ​

 

CTE : 

CTE(Common Table Exprssions)는 우리나라로 풀어쓰자면 공통 테이블 식이라고 합니다. 

CTE가 SQL서버에서 사용될때는 주로 복잡한 조인문, 서브쿼리를 간소화하기위해 사용되며

그리고 계층적 데이터를 표현할때 주로 사용됩니다.

 

 

LEFT JOIN (LEFT OUTER JOIN) :

 

왼쪽외부조인이라도 말하며

왼쪽테이블 전체값왼쪽테이블과 중첩되는 오른쪽테이블에 값들을 반환합니다. 

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading