leetcode : 1587. Bank Account Summary II
다이어그램
erDiagram
USERS {
int account PK
varchar name
}
TRANSACTIONS {
int trans_id PK
int account FK
int amount
date transacted_on
}
USERS ||--o{ TRANSACTIONS : "has"
통장정리 후, 정리한 기록이 10000보다 큰 사람과 금액 출력
문제 풀이
MySQL 1
SELECT u.name, SUM(amount) as balance
FROM users u
JOIN transactions t on u.account = t.account
GROUP BY t.account
HAVING SUM(amount) > 10000
MySQL 2
SELECT U.NAME, SUM(AMOUNT) AS BALANCE
FROM USERS U
JOIN TRANSACTIONS T ON U.ACCOUNT = T.ACCOUNT
GROUP BY U.ACCOUNT
HAVING SUM(AMOUNT) > 10000
- account로 JOIN 후, GROUP BY + HAVING으로 출력해주기.
- 개인적으로는 HAVING이나 ORDER BY에는 ALIAS를 쓴 상태로 넣는게 더 좋아보인다.
Pandas 1
def account_summary(users: pd.DataFrame, transactions: pd.DataFrame) -> pd.DataFrame:
joined = pd.merge(users, transactions, on='account')
grouped = joined.groupby(['account','name']).agg(
balance = ('amount','sum')
).reset_index()
return grouped[grouped['balance']>10000][['name','balance']]
Pandas 2
def account_summary(users: pd.DataFrame, transactions: pd.DataFrame) -> pd.DataFrame:
joined = pd.merge(users, transactions)
grouped = joined.groupby(['account','name']).agg(
balance = ('amount','sum')
).reset_index()
return grouped[grouped['balance']>10000][['name','balance']]
- 마찬가지로 merge 이후, account, named으로 group by (account로만 묶으면 name 없어져서)
- 이후에 조건 걸어줘서 출력
- 다시 풀었는데 merge에 on 빼고는 똑같이 풀었다.
- 겹치는 컬럼이 하나라서 겹치는 컬럼 굳이 안써도 되는데, 쓰는 방식으로 작성하기
코멘트
- 쉽다
'Data Analysis > SQL Pandas' 카테고리의 다른 글
leetcode : 1667. Fix Names in a Table (0) | 2025.02.06 |
---|---|
leetcode : 1661. Average Time of Process per Machine (0) | 2025.02.05 |
leetcode : 1633. Percentage of Users Attended a Contest (0) | 2025.02.04 |
leetcode : 1581. Customer Who Visited but Did Not Make Any Transactions (0) | 2025.02.03 |
[Pandas/MySQL] Active User (0) | 2024.11.14 |
[Pandas/MySQL] Rank (0) | 2024.11.12 |
[MySQL] Example (0) | 2024.08.29 |
댓글