본문 바로가기
Data Analysis/Query

리트코드 : 175. Combine Two Tables

by 베짱이28호 2024. 3. 27.

[Pandas] 리트코드 : 175. Combine Two Tables


문제

Table: Person

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| personId    | int     |
| lastName    | varchar |
| firstName   | varchar |
+-------------+---------+
personId is the primary key (column with unique values) for this table.
This table contains information about the ID of some persons and their first and last names.
 

Table: Address

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| addressId   | int     |
| personId    | int     |
| city        | varchar |
| state       | varchar |
+-------------+---------+
addressId is the primary key (column with unique values) for this table.
Each row of this table contains information about the city and state of one person with ID = PersonId.
 

Write a solution to report the first name, last name, city, and state of each person in the Person table. If the address of a personId is not present in the Address table, report null instead.

Return the result table in any order.

The result format is in the following example.

 

Example 1:

Input: 
Person table:
+----------+----------+-----------+
| personId | lastName | firstName |
+----------+----------+-----------+
| 1        | Wang     | Allen     |
| 2        | Alice    | Bob       |
+----------+----------+-----------+
Address table:
+-----------+----------+---------------+------------+
| addressId | personId | city          | state      |
+-----------+----------+---------------+------------+
| 1         | 2        | New York City | New York   |
| 2         | 3        | Leetcode      | California |
+-----------+----------+---------------+------------+
Output: 
+-----------+----------+---------------+----------+
| firstName | lastName | city          | state    |
+-----------+----------+---------------+----------+
| Allen     | Wang     | Null          | Null     |
| Bob       | Alice    | New York City | New York |
+-----------+----------+---------------+----------+
Explanation: 
There is no address in the address table for the personId = 1 so we return null in their city and state.
addressId = 1 contains information about the address of personId = 2.

 

문제풀이

MySQL

SELECT P.FIRSTNAME, P.LASTNAME, A.CITY, A.STATE
FROM PERSON AS P
LEFT OUTER JOIN ADDRESS AS A ON P.PERSONId = A.PERSONId;

Pandas

import pandas as pd

def combine_two_tables(person: pd.DataFrame, address: pd.DataFrame) -> pd.DataFrame:
	df = pd.merge(person,address, on="personId", how="left")
	return df[['firstName','lastName', 'city', 'state']]
  • 간단하게 join만 해주면 되는 문제.
  • 공통된 부분이 없는 경우 null값을 만들어야 하므로 left join을 사용한다.

코멘트

  • 기본적인 join 문제.
  • 공통 요소 값이 없는 경우는 null로 처리된다.

댓글