🍋 ⚾️ 💻 🎬 🎮

coding_test/SQL 문제

[LeetCode] 1193. Monthly Transactions I (AGGREGATE)

aeightchill 2025. 2. 19. 21:54
728x90

🗂️  문제

[SQL50] 1193. Monthly Transactions I (AGGREGATE)



✍🏻  풀이

 

문제 해석

주어진 Transactions 테이블에서 월별, 국가별로 각 query_name에 대해 다음을 계산하는 문제

  1. trans_count
    • 전체 거래 수
  2. approved_count
    • 승인된 거래 수
    • state = 'approved'인 거래 수만 count
  3. trans_total_amount
    • 전체 거래 금액 합
  4. approved_total_amount
    • state = 'approved'인 거래 금액 합

 

 

코드

WITH all_trans AS (
    -- 모든 거래에 대한 집계
    SELECT 
        country, 
        SUM(1) AS all_trans_cnt, 
        SUM(amount) AS all_trans_amount,
        -- 아래 코드는 PostgreSQL
        TO_CHAR(trans_date, 'YYYY-MM') AS month
        -- MySQL에서는 TO_CHAR이 아닌 DATE_FORMAT을 써야한다.
        -- MySQL : DATE_FORMAT(trans_date, '%Y-%m') AS month
    FROM Transactions
    GROUP BY country, month
),
approved AS (
    -- 승인된 거래에 대한 집계
    SELECT 
        country, 
        SUM(1) AS approved_cnt, 
        SUM(amount) AS approved_amount, 
        TO_CHAR(trans_date, 'YYYY-MM') AS month
    FROM Transactions
    WHERE state = 'approved'
    GROUP BY country, month
)

-- 모든 거래와 승인된 거래를 연결하여 최종 결과 반환
SELECT 
    A.month AS month, 
    A.country AS country, 
    A.all_trans_cnt AS trans_count, 
    COALESCE(B.approved_cnt, 0) AS approved_count, 
    A.all_trans_amount AS trans_total_amount, 
    COALESCE(B.approved_amount, 0) AS approved_total_amount
FROM 
    all_trans A LEFT JOIN approved B 
    ON COALESCE(A.country, 'NULL') = COALESCE(B.country, 'NULL') 
    AND A.month = B.month;

 

 

풀이 방식

 

Table : all_trans

country all_trans_cnt all_trans_amount month
US 3 3000 2018-12
US 1 2000 2019-01
DE 1 2000 2019-01

 

 

Table : approved

country approved_cnt approved_amount month
US 1 1000 2018-12
US 1 2000 2019-01
DE 1 2000 2019-01

 

 

  1. WITH로 모든 거래, 승인된 거래에 대해서 country, month를 GROUP BY로 묶은 임시 테이블을 생성한다.
  2. 1에서 생성한 임시 테이블을 country, month가 같은 것을 기준으로 JOIN하여 답을 도출한다.

 

 

COALESCE

country에 null 값이 들어올 수 있으므로 이를 처리하기 위해 사용

https://youngone-kang.tistory.com/52

 

[SQL] COALESCE

COALESCECOALESCE() 함수는 여러 개의 인자 중에서 NULL이 아닌 첫 번째 값을 반환하는 함수→  값이 NULL일 경우 대체 값을 설정할 때 유용하다.기본COALESCE(value1, value2, ..., valueN)왼쪽부터 차례대로 NULL

youngone-kang.tistory.com

 

 

 

 

 

 

 

 

 

 

 

728x90