본문 바로가기

[LeetCode] 1587. Bank Account Summary 2

by qwee0328 2025. 3. 10.

📝 1587. Bank Account Summary 2

🔹 은행 계좌 요약 2

10000보다 높은 잔액을 가진 사용자의 이름과 잔액을 보고하는 솔루션을 작성하세요. 계정의 잔액은 해당 계정과 관련된 모든 거래 금액의 합계와 같습니다.
어떤 순서로든 결과 테이블을 반환합니다.

 

 

📝 문제 설명

Bank Account Summary 2(1587번) 문제는 특정 기준에 맞는 사용자의 계좌 잔액을 조회하는 문제입니다. 각 사용자의 계좌 잔액을 계산하고 잔액이 10,000보다 높은 사용자만 조회해야 합니다. 잔액은 사용자의 모든 거래 내역(amount)의 합계로 계산됩니다.

 

📊 테이블 구조

Users 테이블

Column Name Type
account int
name varchar

 

Transactions 테이블

Column Name Type
trans_id int
account int
amount int
transacted_on date

 

 

💡 SQL 문제 해결 방법

  1. JOIN을 사용하여 Users 테이블과 Transactions 테이블을 연결합니다.
  2. SUM 함수를 사용하여 각 사용자의 총 거래 금액을 계산합니다.
  3. GROUP BY 절을 사용하여 사용자 계좌별로 잔액을 집계합니다.
  4. HAVING 절을 사용하여 잔액이 10,000보다 큰 사용자만 필터링합니다.

 

반응형

 

🖥️ SQL 풀이

   SELECT a.name
        , SUM(b.amount) AS balance
     FROM Users a
LEFT JOIN Transactions b
       ON a.account = b.account
 GROUP BY a.account
   HAVING SUM(b.amount) > 10000

 

 

🔍 쿼리 분석

  • LEFT JOIN: 사용자의 모든 계좌 정보를 가져오기 위해 사용됩니다.
  • SUM(b.amount): 사용자의 거래 내역을 합산하여 잔액을 계산합니다.
  • GROUP BY a.account: 계좌 번호를 기준으로 집계합니다.
  • HAVING: 잔액이 10,000보다 큰 사용자만 필터링합니다.

 

📌 실행 예제

📊 입력 테이블

Users 테이블

account name
900001 Alice
900002 Bob
900003 Charlie

 

Transactions 테이블

trans_id account amount transacted_on
1 90001 7000 2020-08-01
2 90001 7000 2020-09-01
3 90001 -3000 2020-09-02
4 90002 1000 2020-09-12
5 90003 6000 2020-08-07
6 90003 6000 2020-09-07
7 90003 -4000 2020-09-11

 

쿼리 실행 결과

name balance
Alice 11000
  • Alice의 계좌에는 7000 + 7000 - 3000 = 11000 원이 남아 있습니다
  • Bob의 계좌에는 1000원이 남아 있습니다.
  • Charlie의 계좌에는 6000 + 6000 - 4000 = 8000원이 남아 있습니다.
  • 따라서 10000원 이상 잔액이 있는 Alice의 계좌만 출력합니다.

 

🎯 결론

이 문제는 JOIN 절과 집계 함수를 활용하여 거래 데이터를 집계하고, 특정 조건을 만족하는 사용자만 필터링하는 방법을 연습할 수 있습니다. SQL에서 데이터 집계와 조건 필터링을 효율적으로 처리하는 기본적인 기법을 다룹니다.

 

 


 

 

더 많은 SQL 문제 풀이를 보고 싶다면 LeetCode SQL 문제 모음을 확인해 보세요! 🚀

728x90
반응형