mysql - mysql子查询COUNT与WHERE子句混淆
问题描述
我整天都在捣碎按钮,但无法让这个查询工作。我有 3 个表学生、课程和注册表,显示学生注册了哪些课程
查询需要检索至少有 2 名学生注册的所有课程,按学生人数最多的课程排序
我想出了如何检索每个班级的注册人数,但无法将注册人数过滤为 >= 2 名学生
-- coursetable -----------------------------
CREATE TABLE StudentTable(
studentID VARCHAR(255) NOT NULL,
firstName VARCHAR(255) NOT NULL,
LastName VARCHAR(255) NOT NULL,
DOB DATE NULL,
CONSTRAINT pk_studentTable PRIMARY KEY(studentID)
);
-- coursetable -----------------------
CREATE TABLE CourseTable(
courseID VARCHAR(255) NOT NULL,
courseName VARCHAR(255) NOT NULL,
hoursPerWeek int(11) NULL,
startDate DATE NULL,
CONSTRAINT pk_courseTable PRIMARY KEY(courseID)
);
-- enrolment table --
CREATE TABLE EnrolmentTable(
studentID VARCHAR(255) NOT NULL,
CourseID VARCHAR(255) NOT NULL,
CONSTRAINT pk_enrolmentTable PRIMARY KEY(studentID, CourseID)
);
这是我可以做的查询,显示所有班级的注册情况,但它显示一个班级只有 1 名学生注册。我需要它只显示 => 2 个注册的课程
SELECT ct.CourseName AS Course_Name, COUNT(st.studentID) AS Students_Enrolled
FROM EnrolmentTable et
INNER JOIN courseTable ct ON ct.courseID = et.courseID
INNER JOIN studentTable st ON st.studentID = et.studentID
GROUP BY et.courseID;
我需要使用子查询对吗?但不确定如何
解决方案
您可以使用HAVING
过滤结果
SELECT ct.CourseName AS Course_Name, COUNT(st.studentID) AS Students_Enrolled
FROM EnrolmentTable et
INNER JOIN courseTable ct ON ct.courseID = et.courseID
INNER JOIN studentTable st ON st.studentID = et.studentID
GROUP BY et.courseID
HAVING Students_Enrolled> 1
ORDER BY Students_Enrolled DESC
推荐阅读
- c# - ASP.NET MVC:从视图获取值到控制器
- c++ - 如何过滤 Visual Studio 上的调试输出窗口?
- python - 是否可以在排除索引 0 的情况下计算出列表的平均值?
- javascript - 如何将作者姓名(谁编写命令)放入嵌入标题中
- node.js - 不和谐.js | 有没有办法将变量存储到不同的 js 文件中?
- python - 有没有一种方法可以限制 scipy 生成随机变量集?
- azure-devops - 如何为测试和发布环境构建 Azure Devops Pipelines?
- javascript - 如何从字符串中拆分某个数字但在该字符串中保留另一个数字仍在javascript中
- c# - 是什么导致视频播放期间“尚未为此流或其依赖的流设置有效类型”异常
- python-3.x - 计算会影响 python-3.x 中其他地方的堆栈中相同(但不同)的变量?