-
Notifications
You must be signed in to change notification settings - Fork 6
/
602. Friend Requests II: Who Has Most Friend - Loc
51 lines (42 loc) · 1.62 KB
/
602. Friend Requests II: Who Has Most Friend - Loc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
602. Friend Requests II: Who Has Most Friend - Locked
In social network like Facebook or Twitter, people send friend requests and accept others' requests as well.
Table request_accepted holds the data of friend acceptance, while requester_id and accepter_id both are the id of a person.
| 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 |
Write a query to find the the people who has most friends and the most friends number. For the sample data above, the result is:
| id | num |
|----|-----|
| 3 | 3 |
Note:
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.
Explanation:
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 1:
SELECT T1.id AS id, COUNT(*) AS num
FROM
(SELECT requester_id AS id FROM request_accepted
UNION ALL
SELECT accepter_id AS id FROM request_accepted
) AS T1
GROUP BY id
ORDER BY num DESC
LIMIT 1
#Solution 2:
SELECT ids as id, cnt as num
FROM
(SELECT ids, COUNT(*) AS cnt
FROM
(SELECT requester_id as ids FROM request_accepted
UNION ALL
SELECT accepter_id FROM request_accepted
) AS T1
GROUP BY ids) AS T2
ORDER BY cnt
LIMIT 1