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:
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.
My solution
Db-fiddle for this problem
The key intuition is to use 'union all' to merge the requester_id and accepter_id columns.
SELECT a.id, count(a.id) num
FROM
(
(SELECT requester_id id FROM request_accepted)
UNION ALL
(SELECT accepter_id id FROM request_accepted)
) a
group by a.id
order by count(a.id) DESC
limit 1