SQL Count出现的值

时间:2011-02-01 15:45:54

标签: sql mysql

我正在编写一个课程创建应用程序,用户需要在X个课程中显示所有学生。例如,如果选择了生物学类,则用户应该能够根据用户已经有多少其他课程来过滤用户。我的表格包含以下字段:id,uid,courseid。我想做类似但不知道语法应该是什么的东西:

SELECT * FROM course_list WHERE count(uid) > X AND courseid=Z

其中X是用户过滤到的课程数(值0-3),Z只是用户当前正在查看的课程的ID。

2 个答案:

答案 0 :(得分:2)

您不能在查询的where子句中使用聚合函数。相反,它们属于查询的having部分,因此您需要以下内容:

select StudentId
from course_list
where CourseId = @CourseId
group by StudentId
having count(uid) > @MaxCount

......或者那种效果。

答案 1 :(得分:0)

或者,您可以这样构建数据库:

Table: Students (includes an autoincrementing ID field StudentId)
Table: Cources (includes an autoincrementing ID field CourseId)
Table: StudentCourseAssociation (Includes studentId, courseId, and quarter/semester/year/whatever information)

然后你就是:

SELECT StudentId, Count(*) FROM StudentCourseAssociation
WHERE StudentId IN 
(
    SELECT StudentId FROM StudentCourseAssociation WHERE CourseId = @CourseId
)
AND NOT CourseId = @CourseId
GROUP BY StudentId

这应该让所有学生都参加课程,并提供他们的身份证和他们所拥有的其他课程的数量。我的语法可能不正确,因为我是从内存中输入的。