2

ここでエラーはどこにありますか:

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

エラーが発生しました:

列名 'SMark' が無効です。

4

3 に答える 3

4

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)
于 2013-10-03T09:18:14.400 に答える
0

これを試してください:

select 
    * 
from 
    (

    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
    )a
where  MinMark > SMark
于 2013-10-09T10:33:37.377 に答える
0

ステートメントはの前に論理的に実行されるWHEREため、句でエイリアスを使用することはできません。したがって、その name は表示されません。WHERESELECTSMark

代わりにサブクエリに入れて、次のように外側のクエリでフィルタリングできます。

SELECT *
FROM
(
    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
) AS t
where  MinMark> SMark
于 2013-10-03T09:17:57.497 に答える