写点什么

数据库每日一题 --- 第 8 天:超过 5 名学生的课

作者:知心宝贝
  • 2022 年 6 月 10 日
  • 本文字数:846 字

    阅读完需:约 3 分钟

数据库每日一题---第8天:超过5名学生的课

一、问题描述

表: Courses


+-------------+---------+| Column Name | Type    |+-------------+---------+| student     | varchar || class       | varchar |+-------------+---------+(student, class)是该表的主键列。该表的每一行表示学生的名字和他们注册的班级。
复制代码


编写一个 SQL 查询来报告 至少有 5 个学生 的所有类。


以 任意顺序 返回结果表。


查询结果格式如下所示。


题目链接:超过5名学生的课

二、题目要求

样例

输入: Courses table:+---------+----------+| student | class    |+---------+----------+| A       | Math     || B       | English  || C       | Math     || D       | Biology  || E       | Math     || F       | Computer || G       | Math     || H       | Math     || I       | Math     |+---------+----------+输出: +---------+ | class   | +---------+ | Math    | +---------+解释: -数学课有6个学生,所以我们包括它。-英语课有1名学生,所以我们不包括它。-生物课有1名学生,所以我们不包括它。-计算机课有1个学生,所以我们不包括它。
复制代码

考察

1.聚合函数2.建议用时10~25min
复制代码

三、问题分析

题目要求我们求出选的课程学生数目至少超过5名学生的课程名称,注意题目里面没说一个学生只能选一门课程,也可以选择多门课程学习,所以我们要用到distinct进行唯一性操作。


我们使用聚合函数对表中的数据进行操作,依照class进行分类,输出的结果如下表所示:


| class    | COUNT(student) ||----------|----------------|| Biology  | 1              || Computer | 1              || English  | 1              || Math     | 6              |
复制代码


到这里已经可以很清晰的看出来了,只有最后一行课程Math的数据记录才符合题目的要求,所以对表进行聚合的操作之后,还需要使用having筛选出数量大于 5 的课程。

四、编码实现

select classfrom Coursesgroup by class --聚合函数,依据classhaving count(distinct student)>=5 --筛选数量大于5
复制代码

五、测试结果




发布于: 2022 年 06 月 10 日阅读数: 5
用户头像

知心宝贝

关注

公众号:穿越计算机的迷雾 2022.03.07 加入

生于尘埃 溺于人海 死于理想高台

评论

发布
暂无评论
数据库每日一题---第8天:超过5名学生的课_数据库_知心宝贝_InfoQ写作社区