SQL语句练习一

卡二条的技术圈

共 1209字,需浏览 3分钟

 ·

2021-08-03 17:54

大家好,从今天开始个人公众号也开启每日刷题的文章了。每日都会分享一道数据库相关的练习试题。题目可能很简单,也可能很难。

在每天的试题中,都会记录个人的解题思路。如果你有好的解题思路,也可以评论留言。如果存在不足的地方,也欢迎指正。

题目描述:

有一个courses 表 ,有: student (学生) 和 class (课程)。请用一条SQL语句,列出所有超过或等于5名学生的课。例如,表:

+---------+------------+
| student | class |
+---------+------------+
| A | Math |
| B | English |
| C | Math |
| D | Biology |
| E | Math |
| F | Computer |
| G | Math |
| H | Math |
| I | Math |
+---------+------------+

期望输出的结果为:

+---------+
| class |
+---------+
| Math |
+---------+

学生在每个课中不应被重复计算

解题思路

  1. 首先我们明确最终查询的是课程,也就是class这一列。然后是关于>或者=关于这个课程的学生数量。换句话说,我们要去根据class筛选,那就只能使用group实现,将class的值按照一个分组的思想,一次去统计每一个class的总数是多少。

  2. 我们要注意不能统计重复记录。那就需要使用distinct函数了。并且题目中要求用一条SQL语句。

解答方法

  1. 解题方法一
select class from courses group by class having count(distinct student) > 4;
  1. 解题方法二
select class from 
(select class, count(distinct student) as ct
from courses group by class) as a where ct >=5

第一种方法是直接在having中针对group的数据做一个条件筛选。第二种方法是先统计出所有的课程的总数和课程数,将结果放在一个字表中。由于我们只要class这一列值,因此在用一个select语句去查询字表中的字段,并且添加上我们的筛选条件。


浏览 22
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报