Formatted question description: https://leetcode.ca/all/602.html

602. Friend Requests II Who Has the Most Friends

Level

Medium

Description

In social network like Facebook or Twitter, people send friend requests and accept others’ requests as well.

Table request_accepted

+--------------+-------------+------------+
| requester_id | accepter_id | accept_date|
|--------------|-------------|------------|
| 1            | 2           | 2016_06-03 |
| 1            | 3           | 2016-06-08 |
| 2            | 3           | 2016-06-08 |
| 3            | 4           | 2016-06-09 |
+--------------+-------------+------------+
This table holds the data of friend acceptance, while requester_id and accepter_id both are the id of a person.

Write a query to find the the people who has most friends and the most friends number under the following rules:

  • It is guaranteed there is only 1 people having the most friends.
  • The friend request could only been accepted once, which mean there is no multiple records with the same requester_id and accepter_id value.

For the sample data above, the result is:

Result table:
+------+------+
| id   | num  |
|------|------|
| 3    | 3    |
+------+------+
The person with id '3' is a friend of people '1', '2' and '4', so he has 3 friends in total, which is the most number than any others.

Follow-up:

In the real world, multiple people could have the same most number of friends, can you find all these people in this case?

Solution

The person that has the most friends has the maximum number of occurrences in requester_id and accepter_id, so use union all to obtain all the values in requester_id and accepter_id, including duplicates. Then select the corresponding id and the count of the occurrences of id using group by. Use order by and limit to remain the entry with the maximum number of friends.

# Write your MySQL query statement below
select id, count(*) as num from (
    select requester_id as id from request_accepted
    union all
    select accepter_id from request_accepted
) as friends_count
group by id
order by num desc limit 1;

All Problems

All Solutions