「SQL面试题库」 No_98 活动参与者

2023-10-16 10:42:57 浏览数 (2)

今日真题

题目介绍: 活动参与者 activity-participants

难度中等

SQL架构

表:

代码语言:javascript复制
Friends
代码语言:javascript复制
 --------------- --------- 
| Column Name   | Type    |
 --------------- --------- 
| id            | int     |
| name          | varchar |
| activity      | varchar |
 --------------- --------- 
id 是朋友的 id 和该表的主键
name 是朋友的名字
activity 是朋友参加的活动的名字

表:

代码语言:javascript复制
Activities
代码语言:javascript复制
 --------------- --------- 
| Column Name   | Type    |
 --------------- --------- 
| id            | int     |
| name          | varchar |
 --------------- --------- 
id 是该表的主键
name 是活动的名字

写一条 SQL 查询那些既没有最多,也没有最少参与者的活动的名字

可以以任何顺序返回结果,Activities 表的每项活动的参与者都来自 Friends 表

下面是查询结果格式的例子:

``` 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 | ------ --------------

Result 表: -------------- | activity | -------------- | Singing | --------------

Eating 活动有三个人参加, 是最多人参加的活动 (Jonathan D. , Elvis Q. and Daniel A.) Horse Riding 活动有一个人参加, 是最少人参加的活动 (Bob B.) Singing 活动有两个人参加 (Victor J. and Jade W.) ```

代码语言:javascript复制
sql
    select activity
    from (
        select activity,
        rank()over(order by cnt) rk1,
        rank()over(order by cnt desc) rk2
        from
        (
            select  activity  ,count(*) cnt
            from  Friends
            group by  activity 
        )t1
    )t2
    where rk1 !=1 and rk2 != 1

不需要关联 Activities表,因为 至少有一人参加

  • 已经有灵感了?在评论区写下你的思路吧!

0 人点赞