活动参与者
题目分析:题目要求出不是最多也不是最少人参加的活动,那咱们直接排除就好了。排除方法有两种,一种可以是使用limit 限制,然后取交集,即inner join。还有一种就可以使用dense_rank()
解法一
select F1.activity from (
select activity from Friends group by activity having count(*) != (select count(*) num from Friends group by activity order by num desc limit 1)) F1 inner join
(select activity from Friends group by activity having count(*) != (select count(*) num from Friends group by activity order by num limit 1) ) F2 on F1.activity = F2.activity;
解法二
select f.activity from (
select activity,DENSE_RANK() over(ORDER BY count(activity) desc) d1_rank,DENSE_RANK() over(ORDER BY count(activity)) d2_rank from Friends group by activity ) f where d1_rank <> 1 and d2_rank <> 1;
提交结果如下: