leetcode : 586. Customer Placing the Largest Number of Orders
다이어그램
erDiagram
ORDER {
int order_number PK
int customer_number
}
목표
Write a solution to
find the customer_number for the customer who has placed the largest number of orders.
주문 가장 많이한 손님 번호
문제 풀이
MySQL
-- Solution 1
SELECT CUSTOMER_NUMBER
FROM ORDERS
GROUP BY CUSTOMER_NUMBER
HAVING COUNT(ORDER_NUMBER) = (
SELECT MAX(CNT)
FROM (SELECT COUNT(ORDER_NUMBER) AS CNT FROM ORDERS GROUP BY CUSTOMER_NUMBER) AS TEMP
)
-- Solution 2
SELECT CUSTOMER_NUMBER
FROM ORDERS
GROUP BY CUSTOMER_NUMBER
ORDER BY COUNT(*) DESC
LIMIT 1
- Solution 1 : GROUP BY + HAVING
- GROUP BY에서 ORDER 수를 계산을 한다.
- 계산한 ORDER 수의 최대값을 HAVING 조건에 걸어서 뽑아주기.
- Solution 2 : GROUP BY + ORDER BY
- 정렬 후, LIMIT로 하나만 출력
Pandas
# Solution 1
def largest_orders(orders: pd.DataFrame) -> pd.DataFrame:
if orders.empty:
return pd.DataFrame({'customer_number':[]})
temp = orders.groupby('customer_number').size().reset_index(name = 'count')
max_count = temp[temp['count'] == max(temp['count'])]
answer = max_count.merge(orders,on='customer_number')
return answer[['customer_number']].head(1)
# Solution 2
def largest_orders(orders: pd.DataFrame) -> pd.DataFrame:
return orders['customer_number'].mode().to_frame()
# Solution 3
def largest_orders(orders: pd.DataFrame) -> pd.DataFrame:
orders_counts = pd.DataFrame(orders['customer_number'].value_counts().reset_index())
cond = orders_counts['count'] == (orders_counts['count'].max())
return orders_counts[cond][['customer_number']]
- Solution 1 : groupby + size
- Solution 2 : mode
- Solution 3 : value_counts
코멘트
- .
'Data Analysis > Query' 카테고리의 다른 글
leetcode : 601. Human Traffic of Stadium (0) | 2025.01.07 |
---|---|
leetcode : 596. Classes More Than 5 Students (0) | 2025.01.06 |
leetcode : 595. Big Countries (0) | 2025.01.06 |
leetcode : 585. Investments in 2016 (0) | 2025.01.05 |
leetcode : 584. Find Customer Referee (0) | 2025.01.04 |
leetcode : 577. Employee Bonus (0) | 2025.01.04 |
leetcode : 570. Managers with at Least 5 Direct Reports (0) | 2025.01.03 |
댓글