2024.08.02 TIL

Donghyun·2024년 8월 2일
0

TIL (Today I Learned)

목록 보기
26/53
post-thumbnail

SQL

  1. SET 명령어사용자 정의 변수

    • SET: SET 명령어는 변수의 값을 설정하는 데 사용.
    • 사용자 정의 변수: 사용자 정의 변수는 @ 기호로 시작하며, 사용 전에 반드시 초기화할 필요는 없지만, 초기화하지 않은 변수를 사용하면 NULL 값을 반환한다고 한다.

    예시코드:

    SET @hour := -1;
    
    SELECT (@hour := @hour + 1) AS HOUR,
        (SELECT COUNT(*)
         FROM ANIMAL_OUTS
         WHERE HOUR(DATETIME) = @hour) AS COUNT
    FROM ANIMAL_OUTS
    WHERE @hour < 23
    GROUP BY HOUR
    ORDER BY HOUR;

    참고링크: https://velog.io/@ehdtkd98/프로그래머스-입양-시각-구하기2-SQL

  2. 재귀적 쿼리

    파이썬에도 재귀함수가 있듯이 SQL 에도 재귀 쿼리 기법이 존재한다. 재귀 쿼리의 조건은 다음과 같다:

    • 메모리 상에 가상의 테이블을 저장.
    • 반드시 UNION 을 사용.
    • 비반복문도 최소 1개 요구.
    • 서브쿼리에서 바깥의 가상의 테이블을 참조하는 문장이 반드시 필요.
    • 반복되는 문장은 반드시 정지조건이 요구됨.
    • 가상의 테이블을 구성하면서 그 자신(가상의 테이블)을 참조하여 값을 결정할 때 유용.

    참고자료: https://inpa.tistory.com/entry/MYSQL-📚-RECURSIVE-재귀-쿼리

    예시코드:

    WITH RECURSIVE hours AS (
        SELECT 0 AS hour
        UNION ALL
        SELECT hour + 1
        FROM hours
        WHERE hour < 23
    )
    SELECT 
        h.hour AS HOUR,
        COALESCE(COUNT(a.ANIMAL_ID), 0) AS COUNT
    FROM hours h
        LEFT JOIN ANIMAL_OUTS a 
        ON HOUR(a.DATETIME) = h.hour
    GROUP BY h.hour
    ORDER BY h.hour;

    참고링크: https://velog.io/@ehdtkd98/프로그래머스-입양-시각-구하기2-SQL

  3. DATEDIFF

    오늘 코드카타에 저번에 풀었던 문제들이 융합되는 형태로 등장했다.

    그런 의미에서 다시 한 번 리마인드가 필요할 거 같아 정리한다.

    • DATEDIFF 함수를 사용해 일 수 차이를 볼 때 자동차 렌탈의 경우를 예로 들면 당일 렌탈, 당일 반납을 하는 경우 1일이라고 표기해야 한다.
    • 따라서, DATEDIFF(END_DATE, START_DATE) + 1 이런 식으로 쿼리문을 만들어야 함.
profile
데이터분석 공부 일기~!

0개의 댓글