where 子句中使用的 select 的聚合函数别名

abo*_*vdv 3 t-sql sql-server

这里错误在哪里:

SELECT Users.UserID, 
   ClassCourses.CourseID,
   ClassCourses.MinMark,
   sum(StudentMark) as SMark    
FROM   Users 
INNER JOIN UserExams ON Users.UserID = UserExams.UserID
INNER JOIN Exams ON UserExams.ExamID = Exams.ExamID 
INNER JOIN ClassCourses ON Exams.ClassID = ClassCourses.ClassID AND Exams.CourseID = ClassCourses.CourseID
where  ClassCourses.MinMark> SMark
group by Users.UserID, ClassCourses.CourseID,ClassCourses.MinMark
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

列名称“SMark”无效。

Dan*_*Dan 5

您不能在 WHERE 子句中使用列别名。此外,在比较聚合结果时,必须在应用 GROUP BY 后使用 HAVING 子句。

做这样的事情:

SELECT Users.UserID, 
    ClassCourses.CourseID,
    ClassCourses.MinMark,
    sum(StudentMark) as SMark    
FROM   Users 
INNER JOIN UserExams ON Users.UserID = UserExams.UserID
INNER JOIN Exams ON UserExams.ExamID = Exams.ExamID 
INNER JOIN ClassCourses ON Exams.ClassID = ClassCourses.ClassID AND Exams.CourseID = ClassCourses.CourseID
GROUP BY Users.UserID, ClassCourses.CourseID,ClassCourses.MinMark
HAVING ClassCourses.MinMark > sum(StudentMark)
Run Code Online (Sandbox Code Playgroud)