【LeetCode-SQL】1355. 活动参与者
目录
- 一、题目
- 二、解决
- 1、with+max+min
- 2、HAVING COUNT(*) > SOME()
- 3、dense_rank() over()
- 三、参考
一、题目
表: Friends
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| id | int |
| name | varchar |
| activity | varchar |
+---------------+---------+
id 是朋友的 id 和该表的主键
name 是朋友的名字
activity 是朋友参加的活动的名字
表: Activities
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| id | int |
| name | varchar |
+---------------+---------+
id 是该表的主键
name 是活动的名字
写一条 SQL 查询那些既没有最多,也没有最少参与者的活动的名字
Activities 表的每项活动的参与者都来自 Friends 表。
可以以 任何顺序 返回结果。
下面是查询结果格式的例子。
示例 1:
输入:
Friends 表:
+------+--------------+---------------+
| id | name | activity |
+------+--------------+---------------+
| 1 | Jonathan D. | Eating |
| 2 | Jade W. | Singing |
| 3 | Victor J. | Singing |
| 4 | Elvis Q. | Eating |
| 5 | Daniel A. | Eating |
| 6 | Bob B. | Horse Riding |
+------+--------------+---------------+
Activities 表:
+------+--------------+
| id | name |
+------+--------------+
| 1 | Eating |
| 2 | Singing |
| 3 | Horse Riding |
+------+--------------+
输出:
+--------------+
| activity |
+--------------+
| Singing |
+--------------+
解释:
Eating 活动有三个人参加, 是最多人参加的活动 (Jonathan D. , Elvis Q. and Daniel A.)
Horse Riding 活动有一个人参加, 是最少人参加的活动 (Bob B.)
Singing 活动有两个人参加 (Victor J. and Jade W.)
二、解决
1、with+max+min
思路: 略。
代码:
with t1 as (select activity, count(activity) as cnt from Friends group by activity
)select activity
from t1
where cnt not in (select max(cnt) from t1) and cnt not in (select min(cnt) from t1)
2、HAVING COUNT(*) > SOME()
思路: 略。
代码:
SELECT activity
FROM Friends
GROUP BY activity
HAVING
COUNT(*) > SOME(SELECT COUNT(*) FROM Friends GROUP BY activity)
AND
COUNT(*) < SOME(SELECT COUNT(*) FROM Friends GROUP BY activity)
3、dense_rank() over()
思路:
把每个活动参加的人数正排序一次,反排序一次,取两个rank里都不等于1的。
代码:
select activity
from
(select activity, dense_rank() over(order by count(id) desc) as rnk, dense_rank() over(order by count(id) asc) as reverse_rnkfrom Friends group by activity
) as t1
where rnk != 1 and reverse_rnk != 1;
三、参考
1、Lethe_
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
