У меня есть таблица MySQL, где у вас есть список друзей.

+--------------+-------------+-------------+
| 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  |
|            1 |           5 | 2016-06-09  |
+--------------+-------------+-------------+

Если есть несколько человек с максимальным количеством друзей (в этом случае 1 и 3 имеют по 3 друга в каждом), как я могу распечатать 1 и 3 с их количеством.

У меня есть часть, где я могу найти N-го по величине человека.

select s.requester_id, sum(s.total) as total_friends from (
select requester_id, count(accepter_id) as total from request_accepted
group by requester_id
union 
select accepter_id, count(requester_id) as total from request_accepted
group by accepter_id
  ) as s 
group by s.requester_id
order by total_friends desc;

0
Samira Kumar 6 Дек 2019 в 05:40

1 ответ

Мне удалось придумать этот уродливый, но работающий код.

select s.requester_id, sum(s.total) as total_friends
from 
(select requester_id, count(accepter_id) as total 
from request_accepted
group by requester_id
union
select accepter_id, count(requester_id) as total
from request_accepted
group by accepter_id) as s
group by s.requester_id
having total_friends = (select max(s2.max_total)
from (select sum(s1.total) as max_total
      from (select requester_id, count(accepter_id) as total 
from request_accepted
group by requester_id
union
select accepter_id, count(requester_id) as total
from request_accepted
group by accepter_id) as s1
group by s1.requester_id) as s2)

0
Samira Kumar 7 Дек 2019 в 02:17