본문 바로가기
Data Analysis/Query

leetcode : 586. Customer Placing the Largest Number of Orders

by 베짱이28호 2025. 1. 5.

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

코멘트

  • .

댓글