MySQL:列出一个学期注册超过 6 个(不同)类(class)的学生(Sname)

标签 mysql select count

给定架构:

Student(Snum, Sname)
Course(Cnum, Cname)
Prerequisite(Cnum, Prereq)
Professor(Pnum,Pname, Dept, Office)
Enrollment(Snum, Cnum, Term, Section, Mark)
Schedule(Cnum, Term, Section, Days, Time, Room)
Class(Cnum, Term, Section, Instructor)

我想出了:

SELECT * FROM Student s
HAVING MIN(
    SELECT COUNT(*) FROM Enrollment e
    WHERE e.Snum = s.Snum
    GROUP BY e.Term
) > 6

但我得到:

/* SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT COUNT(*) FROM Enrollment e WHERE e.Snum = s.Snum GROUP BY e.Term ) >' at line 3 */

知道如何解决这个问题吗?谢谢!

此外,知道我有正确的逻辑会让人放心 =)

编辑:最终答案...

SELECT Student.Sname
FROM(
    SELECT COUNT(DISTINCT Cnum) as `classes`, e.Term as `term`, e.Snum as `student`
    FROM Enrollment e
    GROUP BY e.Term, e.Snum
) x
JOIN Student ON Student.Snum = `student`
WHERE x.`classes` > 6

最佳答案

如果您想查看每个学期至少上过 6 门课的学生:

SELECT * FROM Student s
WHERE (SELECT MIN(perTerm) FROM(
    SELECT COUNT(DISTINCT Cnum) as perTerm FROM Enrollment e
    WHERE e.Snum = s.Snum
    GROUP BY e.Term
)) > 6

给你。您已经快到了,但是如果您没有 GROUP BY,则无法使用 HAVING

如果您想要任何术语,请将 MIN 替换为 MAX,如果您想要特定术语,请使用 Vegard 的更新版本。

<小时/>

如果双子查询不起作用,请尝试这个:

SELECT `student`
FROM(
    SELECT COUNT(DISTINCT Cnum) as `classes`, s.Term as `term`, s.Snum as `student`
    FROM Enrollment e
    GROUP BY e.Term, e.Snum
)
GROUP BY `term`
HAVING MIN(`classes`) > 6

关于MySQL:列出一个学期注册超过 6 个(不同)类(class)的学生(Sname),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4040312/

相关文章:

php - .php 脚本显示 mySQL 内容

php - 发布与其他选择框一起选中的表行

php - CakePHP + Crud "Add"操作 (POST) 返回 412 前提条件失败

sql-server - SQL 解析出多个子字符串

sql - 如何选择 COUNT DISTINCT 为 MAX 的行?

javascript - HTML 按钮的点击计数器

MySQL - 使用预定义的插入值创建表列

sql - 来自同一个表的两个联接

php - 如何在Count()中指定条件?

javascript - 计算数组中有多少个具有特定名称的条目并保存以供以后使用