602 好友申请II:谁有最多的好友
SQL架构
Create table If Not Exists request_accepted_602 ( requester_id INT NOT NULL, accepter_id INT NULL, accept_date DATE NULL);
Truncate table request_accepted_602;
insert into request_accepted_602 (requester_id, accepter_id, accept_date) values ('1', '2', '2016/06/03');
insert into request_accepted_602 (requester_id, accepter_id, accept_date) values ('1', '3', '2016/06/08');
insert into request_accepted_602 (requester_id, accepter_id, accept_date) values ('2', '3', '2016/06/08');
insert into request_accepted_602 (requester_id, accepter_id, accept_date) values ('3', '4', '2016/06/09');
在 Facebook 或者 Twitter 这样的社交应用中,人们经常会发好友申请也会收到其他人的好友申请。
表 request_accepted 存储了所有好友申请通过的数据记录,其中, requester_id 和 accepter_id 都是用户的编号。
| 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 |
写一个查询语句,求出谁拥有最多的好友和他拥有的好友数目。对于上面的样例数据,结果为:
| id | num |
|----|-----|
| 3 | 3 |
解题
-- 可以将 requester_id 和 accepter_id 联合起来,然后统计每个人出现的次数。
select requester_id as ids from request_accepted_602
union all
select accepter_id from request_accepted_602;
-- 最终SQL
select ids as id, cnt as num
from
(
select ids, count(*) as cnt
from
(
select requester_id as ids from request_accepted_602
union all
select accepter_id from request_accepted_602
) as tbl1
group by ids
) as tbl2
order by cnt desc
limit 1;