LeetCode 1193 해결 방법

발행: (2026년 1월 16일 오전 05:45 GMT+9)
2 min read
원문: Dev.to

Source: Dev.to

문제 설명

테이블 Transactions는 다음과 같은 컬럼을 가지고 있습니다:

  • id (primary key)
  • country
  • state (열거형: 'approved' 또는 'declined')
  • amount
  • trans_date

각 월‑년 및 국가별로 다음과 같은 집계값을 반환해야 합니다(정렬 순서는 상관없음):

  • monthYYYY-MM 형식으로 포맷된 값
  • trans_count – 전체 거래 수
  • approved_count – 승인된 거래 수
  • trans_total_amount – 모든 거래 금액의 합계
  • approved_total_amount – 승인된 거래 금액의 합계

접근 방법

  1. 그룹화trans_date에서 추출한 월‑년과 country를 기준으로 행을 그룹화합니다.
  2. 집계
    • COUNT(id)는 전체 거래 수를 제공합니다.
    • SUM(amount)는 전체 거래 금액을 제공합니다.
    • 승인된 거래에 대한 지표는 SUM 안에 CASE 표현식을 사용합니다:
      • state = 'approved'인 경우 1(또는 amount)을 반환하고, 그렇지 않으면 0을 반환합니다.
  3. 월 포맷 – PostgreSQL에서는 TO_CHAR(trans_date, 'YYYY-MM')를 사용해 날짜를 YYYY-MM 문자열로 변환합니다.

SQL 쿼리

SELECT 
    TO_CHAR(trans_date, 'YYYY-MM') AS month,
    country                        AS country,
    COUNT(id)                      AS trans_count,
    SUM(
        CASE
            WHEN "state" = 'approved' THEN 1
            ELSE 0 
        END
    )                              AS approved_count,
    SUM(amount)                    AS trans_total_amount,
    SUM(
        CASE
            WHEN "state" = 'approved' THEN amount
            ELSE 0 
        END
    )                              AS approved_total_amount
FROM Transactions
GROUP BY TO_CHAR(trans_date, 'YYYY-MM'), country;
Back to Blog

관련 글

더 보기 »

LeetCode 586을 푸는 방법

문제 개요: 작업은 가장 많은 수량의 주문을 한 고객 번호를 식별하는 것입니다. Orders 테이블에는 두 개의 식별자 열이 포함되어 있습니다.

데이터베이스 트랜잭션

트랜잭션은 SQL 데이터베이스가 작동하는 방식의 근본적인 요소입니다. 매일 수조 건의 트랜잭션이 실행되며, SQL에 의존하는 수천 개의 애플리케이션 전반에 걸쳐 이루어집니다.