본문 바로가기
(2024-10) 스파르타 내일배움캠프 - 백엔드/TIL

(2024-12-16) TIL

by 어뫄어뫄 2024. 12. 16.

데일리루틴(SQL)

WITH n AS (
SELECT
    DATE_FORMAT(sales_date, '%Y-%m-%d') AS sales_date,
    product_id,
    user_id,
    sales_amount
FROM
    ONLINE_SALE
),
f AS (
    SELECT
    DATE_FORMAT(sales_date, '%Y-%m-%d') AS sales_date,
    product_id,
    NULL AS user_id,
    sales_amount
FROM
    OFFLINE_SALE
),
u AS
(SELECT
    *
FROM
    n
union distinct
SELECT
    *
FROM
    f)
SELECT
    *
FROM
    u
WHERE
    MONTH(sales_date) = 03
ORDER BY
    sales_date,
    product_id,
    user_id

 

  • WITH 절 (Common Table Expressions, CTE):
    • CTE는 쿼리 블록을 정의하여 여러 번 참조할 수 있도록 함. 이 쿼리에서는 n, f, u라는 세 개의 CTE가 정의되어 있음.
    WITH n AS (
        -- CTE 정의
    )
    • CTE는 SELECT 문과 함께 사용되며, 메인 쿼리에서 참조할 수 있음.
  • SELECT 절:
    • SELECT 문을 사용하여 특정 컬럼을 선택할 수 있음.
    • 여기서는 DATE_FORMAT 함수를 사용하여 날짜 형식을 변환함.
    SELECT
        DATE_FORMAT(sales_date, '%Y-%m-%d') AS sales_date,
        product_id,
        user_id,
        sales_amount
  • DATE_FORMAT 함수:
    • DATE_FORMAT 함수는 날짜를 특정 형식으로 변환함.
    • %Y-%m-%d는 연도-월-일 형식을 나타냄.
  • NULL 값:
    • NULL AS user_id는 user_id에 대해 NULL 값을 명시적으로 할당함.
  • UNION:
    • UNION은 두 개 이상의 SELECT 문에서 결과를 결합합니다. UNION DISTINCT를 사용하여 중복된 결과를 제거함.
    u AS (
        SELECT
            *
        FROM
            n
        UNION DISTINCT
        SELECT
            *
        FROM
            f
    )

     

  • WHERE 절:
    • WHERE 절을 사용하여 특정 조건을 만족하는 행을 필터링함.
    • 여기서는 MONTH(sales_date) = 03으로 3월에 해당하는 데이터만 선택하고 있음.
    WHERE
        MONTH(sales_date) = 03

     

  • ORDER BY 절:
    • ORDER BY를 사용하여 결과를 정렬함.
    • 여기서는 sales_date, product_id, user_id 순서로 정렬하고 있음.
    ORDER BY
        sales_date,
        product_id,
        user_id