Table: Users
+--------------+---------+
| Column Name | Type |
+--------------+---------+
| account | int |
| name | varchar |
+--------------+---------+
account는 이 테이블의 기본 키(고유한 값을 가지는 열)입니다.
이 테이블의 각 행은 은행에서 각 사용자의 계좌 번호를 포함합니다.
이 테이블에는 같은 이름을 가진 두 사용자는 존재하지 않습니다.
Table: Transactions
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| trans_id | int |
| account | int |
| amount | int |
| transacted_on | date |
+---------------+---------+
trans_id는 이 테이블의 기본 키(고유한 값을 가지는 열)입니다.
이 테이블의 각 행은 모든 계좌에 발생한 모든 변경 사항을 포함합니다.
amount는 사용자가 돈을 받았을 경우 양수이고, 돈을 이체했을 경우 음수입니다.
모든 계좌는 잔고 0으로 시작합니다.
문제
잔고가 10000보다 큰 사용자의 이름과 잔고를 조회하는 해결 방법을 작성하세요.
계좌의 잔고는 해당 계좌와 관련된 모든 거래의 amount 합계와 같습니다.
결과 테이블은 임의의 순서로 반환합니다.
결과 형식은 다음 예시와 같습니다.
Example 1:
Input:
Users table:
+------------+--------------+
| account | name |
+------------+--------------+
| 900001 | Alice |
| 900002 | Bob |
| 900003 | Charlie |
+------------+--------------+
Transactions table:
+------------+------------+------------+---------------+
| trans_id | account | amount | transacted_on |
+------------+------------+------------+---------------+
| 1 | 900001 | 7000 | 2020-08-01 |
| 2 | 900001 | 7000 | 2020-09-01 |
| 3 | 900001 | -3000 | 2020-09-02 |
| 4 | 900002 | 1000 | 2020-09-12 |
| 5 | 900003 | 6000 | 2020-08-07 |
| 6 | 900003 | 6000 | 2020-09-07 |
| 7 | 900003 | -4000 | 2020-09-11 |
+------------+------------+------------+---------------+
Output:
+------------+------------+
| name | balance |
+------------+------------+
| Alice | 11000 |
+------------+------------+
설명 :
Alice의 잔고는 (7000 + 7000 - 3000) = 11000입니다.
Bob의 잔고는 1000입니다.
Charlie의 잔고는 (6000 + 6000 - 4000) = 8000입니다.
✏️ 풀이
import pandas as pd
def account_summary(users: pd.DataFrame, transactions: pd.DataFrame) -> pd.DataFrame:
result = transactions.groupby('account')['amount'].sum().reset_index(name = 'balance')
result = pd.merge(users, result, how='inner', on='account')
return result[result['balance'] > 10000][['name', 'balance']]
1. account별 총 합(잔고) 구하기
2. 1번에 user 정보 조인
3. 잔고가 10000보다 큰 유저 조회
간만에 헤매지 않고 한 번에 깔끔하게 풀었다👍