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;