菜鸟笔记
提升您的技术认知

mysql——美团面试题-ag真人游戏

2023/3/27 美团二面

题目描述

create table if not exists courses (student varchar(255), class varchar(255));
insert into courses (student, class) values ('a', 'math');
insert into courses (student, class) values ('b', 'english');
insert into courses (student, class) values ('c', 'math');
insert into courses (student, class) values ('d', 'biology');
insert into courses (student, class) values ('e', 'math');
insert into courses (student, class) values ('f', 'computer');
insert into courses (student, class) values ('g', 'math');
insert into courses (student, class) values ('h', 'math');
insert into courses (student, class) values ('i', 'math');

请列出所有超过或等于5名学生的课。

应该输出

 --------- 
| class   |
 --------- 
| math    |
 --------- 

题解

方法一:使用 group by 子句和子查询【通过】
思路:
先统计每门课程的学生数量,再从中选择超过 5 名学生的课程。

算法:
使用 group by 和 count 获得每门课程的学生数量。
这里面最终的要就是分组,分组之后再抓取超过5名学生的科目。

select
    class
from
    (select
        class, count(distinct student) as num
    from
        courses
    group by class) as temp_table
where
    num >= 5;

方法二:

使用 group by 和 having 条件【通过】
算法
group by 子句后使用 having 条件是实现子查询的一种更加简单直接的方法。

select
    class
from
    courses
group by class
having count(distinct student) >= 5;
网站地图