sql - SQL查找所有注册学生数量超过该课程允许的enroll_limit的课程
问题描述
我目前正在上数据库课,但由于今晚的作业问题而陷入困境
查找“斯隆”大楼中招收的学生人数超过其注册人数限制的课程。返回 courseno、enroll_limit 和这些课程的实际注册。
我一直在努力计算每门课程有多少学生。
CREATE TABLE Course (
courseno VARCHAR(7),
credits INTEGER NOT NULL,
enroll_limit INTEGER,
classroom VARCHAR(10),
PRIMARY KEY(courseNo), );
CREATE TABLE Student (
sID CHAR(8),
sName VARCHAR(30),
major VARCHAR(10),
trackcode VARCHAR(10),
PRIMARY KEY(sID),
FOREIGN KEY (major,trackcode) REFERENCES Tracks(major,trackcode) );
CREATE TABLE Enroll (
courseno VARCHAR(7),
sID CHAR(8),
grade FLOAT NOT NULL,
PRIMARY KEY (courseNo, sID),
FOREIGN KEY (courseNo) REFERENCES Course(courseNo),
FOREIGN KEY (sID) REFERENCES Student(sID) );
我目前非常失败的尝试是
SELECT sloancourse.courseno
FROM course sloancourse
WHERE
sloancourse.classroom = 'Sloan'
and sloancourse.courseno IN (
SELECT c.courseno
FROM student s, enroll e, course c
WHERE
c.courseno = e.courseno
and s.sid = e.sid
and sloancourse.courseno = c.courseno
)
;
解决方案
查找“斯隆”大楼中招收的学生人数超过其注册人数限制的课程。返回 courseno、enroll_limit 和这些课程的实际注册。
您通常会选择join
课程和注册(使用标准连接语法,使用on
关键字)、group by
课程,最后过滤学生使用having
子句计数的课程。
select
c.courseno,
c.enroll_limit,
count(*) actual_enrollment
from course c
inner join enroll e on e.courseno= c.courseno
where c.classroom = 'Sloan'
group by c.courseno, c.enroll_limit
having count(*) > c.enroll_limit
请注意,您无需引入student
表格即可获得所需的结果。
推荐阅读
- unit-testing - 当只有已知错误时将构建设置为成功
- java - Java Rest Template 抛出 java.lang.IllegalArgumentException:比较方法违反了它的一般约定
- c# - C# - Task.Run 中具有值类型变量的方法调用似乎是通过引用隐式传递的
- android - 我的帐户仍然是内部测试员。谷歌播放控制台
- angular - 星云和角材质对话框的问题
- google-bigquery - 有没有办法让 Pub/Sub -> Dataflow -> BigQuery 模板处理每条消息的多个记录?
- r - 如何在 Jupyter 笔记本中安装 tidymodels 包?
- c# - 如何解密软包装密钥
- java - 如何将价值提高 50%?
- reactjs - React Hooks 和 Socket.IO 的过时关闭问题